i18n and API endpoints

Mike's Notes

Ajabbi takes an API-first approach. SaaS applications and their APIs are versioned the same, and i18n applies to each API.

Resources

References

  • Design and Build Great Web APIs by Mike Admunson (Pragmatic)
  • Everything Curl (free book) 

Repository

  • Home > Ajabbi Research > Library >
  • Home > Handbook > 

Last Updated

18/05/2025

Article

By: Mike Peters
On a Sandy Beach: 20/04/2025

Mike is the inventor and architect of Pipi and the founder of Ajabbi.

Given that each build is human language specific, it makes sense to go with:

Options

GraphQL vs REST

Mike's Notes

I am figuring out how to have REST and GraphQL API endpoints available for integration.

  • What is the best way to document them?
  • How are the endpoints structured?
  • What open-source front-facing API engines could be used?

Resources

References

  • Reference

Repository

  • Home > Ajabbi Research > Library >
  • Home > Handbook > 

Last Updated

18/05/2025

GraphQL vs REST

By: Mike Peters
On a Sandy Beach: 23/08/2024

Mike is the inventor and architect of Pipi and the founder of Ajabbi.

words

ShareThis vs AddToAny

Mike's Notes

The Ajabbi website needs a simple way for people to print, email, or share any web page on social media. Tracking is not required, as it is against Ajabbi's privacy policy.

ShareThis is one option, and it's free. 

I have some questions.

  • Is it safe?
  • Why is it free?
  • Are there any privacy issues?
  • Can any tracking be turned off?
  • Is it reliable?
  • Is it WAIG accessible?
  • How does it compare with other social bookmarking websites?

I concluded that ShareThis was breaching users' privacy. I am now using AddToAny, which anonymises the data collected.

I don't know where this information came from below.

Resources

References

  • Reference

Repository

  • Home > Ajabbi Research > Library >
  • Home > Handbook > 

Last Updated

18/05/2025

Article

By: Mike Peters
On a Sandy Beach: 20/04/2025

Mike is the inventor and architect of Pipi and the founder of Ajabbi.

Wikipedia

"A social bookmarking website is a centralized online service that allows users to store and share Internet bookmarks. Such a website typically offers a blend of social and organizational tools, such as annotation, categorization, folksonomy-based tagging, social cataloging and commenting. The website may also interface with other kinds of services, such as citation management software and social networking sites. ..." - Wikipedia

"ShareThis is a technology company headquartered in Palo Alto, CA, with offices in New York, Chicago, and Los Angeles. It offers free website tools and plugins for online content creators. ShareThis collects data on user behavior, and provides this to advertisers and technology companies for ad targeting, analytics, and customer acquisition purposes. ShareThis has an exclusive license with the University of Illinois for patent applications made by co-founder David E. Goldberg. The patents include genetic algorithms and machine learning technologies used for the purposes of information collection and discovery based on a user's sharing behavior. ..." - Wikipedia

ShareThis Instructions

How to Reinitialize ShareThis Buttons With Specific Sharing Parameters
In this guide, we’ll teach you how to reinitialize (reload) our ShareThis buttons to use specific sharing parameters. By default the ShareThis widget loader loads as soon as the browser encounters the JavaScript tag; typically in the tag of your page. ShareThis assets are generally loaded from a CDN closest to the user. However, if you wish to change the default setting so that the widget loads after your web page has completed loading then you simply set a parameter in the page.

Reinitializing the buttons would allow you to:

  • Take control of when to display the buttons, for example, until a modal or pop-up opens up.
  • Have different instances of the buttons on the same page with different configurations, for example, if you want to display only the Twitter button on a specific part and the Facebook one on another. Or if you want to have different languages on different sets of buttons.
  • Auto refresh share button properties when new links are loaded with share buttons (infinite scroll).
Note: If you don’t want to reinitialize the buttons with specific parameters, you could just use the window.__sharethis__.initialize() function as it is whenever your modal, pop-up, etc. activates. Please note that you may have to set a delay of around 0.3 to 1 second before adding the line of code above to give time for the container to appear, otherwise, the function will be called too soon.

Add <div> and Javascript code

// render the html
// load the buttons window.__sharethis__.load('inline-share-buttons', {/* this is where your configurations must be, read the Configuration section */

Once you’ve added the above portion of the code, you’re now able to include any or all of the following configuration options below.

Configuration Options

config = { 
   alignment: STRING, // left, right, center, justified.
   container: STRING, // id of the dom element to load the buttons into
   enabled: BOOLEAN,
   font_size: INTEGER, // small = 11, medium = 12, large = 16.
   id: STRING, // load the javascript into a specific dom element by id attribute
   labels: STRING, // "cta", "counts", or "none"
   language: STRING   // IETF language tag in which the buttons' labels are,
   min_count: INTEGER, // minimum amount of shares before showing the count
   padding: INTEGER, // small = 8, medium = 10, large = 12.
   radius: INTEGER, // in pixels
   networks: ARRAY[STRING],
   show_total: BOOLEAN,
   show_mobile_buttons: BOOLEAN, // forces sms to show on desktop
   use_native_counts: BOOLEAN, // uses native facebook counts from the open graph api
   size: INTEGER, // small = 32, medium = 40, large = 48.
   spacing: INTEGER, // spacing = 8, no spacing = 0.
};
  

Example

// render the html
// load the buttons window.__sharethis__.load('inline-share-buttons', { alignment: 'left', id: 'my-inline-buttons', enabled: true, font_size: 11, padding: 8, radius: 0, networks: ['messenger', 'twitter', 'pinterest', 'sharethis', 'sms', 'wechat'], size: 32, show_mobile_buttons: true, spacing: 0, url: "https://www.sharethis.com", // custom url title: "My Custom Title", language: "en", image: "https://18955-presscdn-pagely.netdna-ssl.com/wp-content/uploads/2016/12/ShareThisLogo2x.png", // useful for pinterest sharing buttons description: "My Custom Description", username: "ShareThis" // custom @username for twitter sharing });

Available Networks

Social Service data-network Code
Black Lives Matter blm
Blogger blogger
Buffer buffer
Copy Link copy
Diaspora diaspora
Digg digg
Douban douban
Email email
Evernote evernote
Facebook facebook
Flipboard flipboard
Gmail gmail
Google Bookmarks googlebookmarks
Hacker News hackernews
Instapaper instapaper
iOrbix iorbix
Kakao kakao
Koo App kooapp
Line line
Linkedin linkedin
LiveJournal livejournal
Mail.Ru mailru
Meneame meneame
Messenger messenger
Odnoklassniki odnoklassniki
Outlook outlook
Pinterest pinterest
Pocket getpocket
Print print
Push to Kindle kindleit
Qzone qzone
Reddit reddit
Refind refind
Renren renren
Skype skype
Surfingbird surfingbird
Telegram telegram
Tencent QQ tencentqq
Threema threema
Trello trello
Tumblr tumblr
Twitter twitter
Viber viber
VK vk
WeChat wechat
ShareThis sharethis
Sina Weibo weibo
SMS sms
Snapchat snapchat
WhatsApp whatsapp
WordPress wordpress
Xing xing
Yahoo Mail yahoomail
Yummly yummly

Lazy loading and ShareThis tools

The ShareThis tools load/display only the first time the site loads. In case you are using tools like the Image Share Buttons or Video Share Buttons and your site uses lazy loading or similar technologies you will need to reinitialize the tools once newer elements appear.

Since ShareThis searches for the images/embedded videos on that occasion only, and the images closer to the bottom aren’t loaded yet, ShareThis doesn’t know of their existence even if they do load later on, and won’t display the buttons on them.

As a workaround for this, the Javascript code below will check every 3 seconds if any scrolling is done, if so, it will reinitialize the buttons. We are using the scrolling as a way to know if the images have loaded; since the images load once a visitor scrolls to that specific part.

//state variable for scrolling
let scrolling = false;

//in case of scrolling, change the state of the scrolling variable to true
window.onscroll = function() {
scrolling = true;
}
/*create an interval that checks every 3 seconds the state of the scrolling variable, if any scrolling has been done in that interval, reinitialize the buttons*/

setInterval(() => {
if (scrolling) {
scrolling = false;
window.sharethis.initialize()
}
}, 3000);

Notes

Please keep in mind that Open Graph tags will take precedence when sharing on Facebook and other social channels. If linking to a custom URL, please be sure to have Open Graph tags filled out for that page as well.

As with our other tools, we recommend moving the site to live production before giving it a try as there are some resources that aren’t passed during a local/test environment.

Order of Precedence

It is important to remember the order of precedence by which the ShareThis code processes share properties. Generally, we recommend using one approach by which sharing properties are specified on your pages to prevent errors.

  • Any dynamically specified JavaScript properties (i.e. highest precedence)
  • Properties specified in tags (i.e. second precedence)
  • Open Graph Protocol tags (i.e. lowest precedence)

ajabbi on reddit

Mike's Notes

A subreddit has been created for Ajabbi and Pipi to foster Developer Relations (DevRel).

According to the 2024 Stack Overflow Developer Survey, Most developers visit websites daily for technical information and post questions and answers. One of those websites is Reddit, so Ajabbi needs to be there with Pipi.

Anyone can read the Ajabbi community on Reddit, but only registered people can post. This is to keep spammers out.

At the same time, the Pipi CMS static page generator is slowly publishing, testing, and organising the pages of Pipi's technical documentation on a public website.

A regular engineering newsletter is being organised.

This is part of many steps in sharing pipi with developers.

Resources

References

  • Reference

Repository

  • Home > Ajabbi Research > Library >
  • Home > Handbook > 

Last Updated

18/05/2025

ajabbi on reddit

By: Mike Peters
On a Sandy Beach: 21/08/2024

Mike is the inventor and architect of Pipi and the founder of Ajabbi.

words

When life gives you lemons, write better error messages

Mike's Notes

I found this article on Medium, which gives me somewhere to start on getting the Content Management System to store and generate Error Messages.

Resources

References

  • Reference

Repository

  • Home > Ajabbi Research > Library >
  • Home > Handbook > 

Last Updated

18/05/2025

When life gives you lemons, write better error messages

By: Jenni Nadler
Wix UX on Medium: 12/09/2022

When it comes to error handling, it truly is a team sport

Error messages are part of our daily lives online. Every time a server is down or we don’t have internet, or we forget to add some info in a form, we get an error message. “Something went wrong” is the classic. But what went wrong? What happened? And, most importantly, how can I fix it?

We encounter error messages all the time, but how often do they actually help us understand what went wrong and how to fix it?

About a year ago at Wix, we abruptly realized that, too often, we were not giving users the answers to these questions. When we got this wake-up call, we felt compelled to act swiftly, and not just to address the one error message that woke us up.

Welcome, folks, to Errorgate 2021.

Or, that time we changed thousands of error messages across Wix in just a month.

To complete this effort, we first had to define for ourselves what counted as a bad error message and what counted as a good error message.

What makes a bad error message

This is an example of a bad error message. It uses an inappropriate tone, passes the blame, speaks in technical jargon and is too generic.

Inappropriate tone: Imagine a doctor performing a procedure and then suddenly saying “Oops! Something went wrong…” That is the last thing anyone wants to hear when the stakes are high, whether it’s surgery or someone’s source of income. That is not the time to be cutesy or fluffy. We want to show the users that we know it’s serious and we understand it’s important to them.

Technical jargon: Even in today’s world of user-centered design, technical jargon still sneaks its way into error messages. You couldn’t fetch my data? My credentials were denied? What? The technical stuff is not important to the user, they just want to know what went wrong and how to fix it.

Passing the blame: Try to focus on the problem, rather than the action that led to the problem. We don’t want to shame users, even if something they did is why they’re seeing a certain error message.

We also made the decision not to pass blame on to third parties because it makes us look unprofessional, even if it would have taken some of the burden off of Wix. The user came to Wix as a trusted platform; they don’t want to think about other platforms. While we can say something like, “We’re having trouble connecting to ___”, we wouldn’t say something like, “___ isn’t responding right now.”

Generic for no reason: Sometimes we don’t know what caused the error… but sometimes we do. If we know what caused it and we’re not telling them, we’re doing our users the ultimate disservice.

What makes a good error message

An error pop-up demonstrating a good error message with each section highlighted to show why it’s better than the bad example. “Unable to connect your account (explains what happened). Your changes were saved (provides reassurance), but we could not connect account due to a technical issue on our end (explains also why the error happened). Please try connecting again (displays empathy and helps the user fix the issue). If the issue keeps happening, contact Customer Care (gives the user a way out


This is an example of a good error message. It explains what happened and why, provides reassurance, is empathetic, helps the user fix the issue and gives the user a way out.

Say what happened and why: Make it super clear what did or didn’t happen. This can be done with a combination of visuals and text. Explain why the user got this error, even if the only explanation is that there was a technical issue. At Wix, we made the decision to say “an issue on our end” if we have the space, to really reiterate that it’s not the user’s fault.

Provide reassurance: Where possible, let them know what was not affected by the error. For example, were their changes still saved as a draft, even though their email wasn’t sent?

Be empathetic: While we don’t want to be overly apologetic, we decided that we did still want to use “please” if the situation warrants it. Maybe it’s a really dire situation, or it’s something that we absolutely can’t help the user solve. In that case, we might use “please” to empathize even more.

Help them fix it: Tell them exactly what to do if there’s a way to possibly fix it. Short on space? Send them to a knowledge base article with a descriptive link like, “Learn how to resolve this” or “How do I fix this?”

Always give a way out: If they can’t fix the problem, or if it’s possible the issue could keep happening, provide them with a way to contact Customer Care.

Now that we had defined what makes a good or a bad error message, we had to start getting rid of the bad ones.

How we tackled removing bad error messages

We did a search in our content management system and found that there were 7,643 keys with the word “error” in the key or value. That’s 7,643 pieces of content that–at the very least–needed to be reviewed.

The task seemed monumental.

But we did it. We reviewed every single piece of content related to errors and decided if it was relevant for this effort. Once we had a list of all the errors we considered “generic” or “not helpful”, we sent everything to developers.

This was just one of the Monday.com boards that we used to categorize every single piece of content related to errors. Boards like these helped us set priorities, due dates and keep all disciplines in the loop.

Developers went message by message and mapped where each was being triggered in the code. They looked at what was causing the message to show, how frequently it was occurring, and what could be done to resolve the issue.

Based on that error mapping, the product managers, UX designers, and writers sat down and came up with solutions. We started by transferring everything from a spreadsheet to a Monday board, where we could easily track the status of things and what needed to be done. Sometimes, it was just a simple content change. In other cases, it required brand new error messages. And in lots of other instances, there was additional development work that needed to be done to fix things behind the scenes.

Then, we prioritized which errors to work on first. To set priorities, we focused on how often the error was happening and if it blocked the user from completing the flow. After that, we set milestones of one to four weeks, so that things didn’t fall by the wayside.

What we learned

There’s a difference between generic and unclear messages. While there were certainly a lot of generic “Something went wrong” messages, there were also a lot of unclear messages. These are just as bad as generic messages, and deserve the same amount of attention.

A generic message next to an unclear message. Generic message: “Something went wrong and this action could not be completed.” Unclear message: “Make sure you allow the requested permissions and try again.”

An example of a generic message compared to a message that is unclear. In the generic message, we’re simply not telling the user anything other than something went wrong. In the unclear message, we tried to explain what went wrong, but it used confusing language.

It’s not a content issue most of the time. Avishai Abrahami, our CEO and the reason this project got started, put it best in his email to all employees. “Generic errors are the result of bad development and product. … We must all care about it together.”

Truly everyone in Wix had to come together across all disciplines to fix these messages. Developers had to investigate and map. Product managers had to prioritize and create tasks. Designers had to provide new designs for new flows. And we, the UX writers, had to write and rewrite thousands of error messages.

We should be asking more questions. It used to be really common for a developer to say to us, “Hey, we need a generic error message here. Can you add one?” And we would say yes, thinking it would be a fallback or rare message. We didn’t often stop to ask questions like, “Why are users seeing this?” and “What is happening in the background?”

We missed a learning opportunity. Unfortunately, we were reactive instead of proactive here. If this effort had been strategically planned, it could have been an amazing learning opportunity for junior writers in particular. Instead, we were scrambling to write and rewrite messages without much strategic thought.

We were being a bad friend. At Wix, we have the mantra, “Write it like you’re talking to a friend.” We really believe in empathizing with the user, and being a friend with them throughout their process. But it turns out that we were more like that friend who loves to gossip, but doesn’t pick up the phone when life gets hard. That is not the friend we want to be, so we had to really dig deep and admit that we weren’t doing the best we could.

When we work together, we build better products. It’s cheesy, but it’s true.

What we’ve changed in our process

Established a cross-functional team to focus on error handling. This team is made up of senior product managers, frontend and backend developers, UX designers and UX writers. Their goal is to make sure proper error handling is part of the product life cycle, not an afterthought.

View it as a shared responsibility. Everyone is responsible for making sure we’re handling errors properly. Product managers are expected to place more emphasis on errors and edge cases, not just happy flows. Developers are expected to investigate and document errors according to platformized guidelines. Data scientists are expected to do better analysis on errors so we can track the events properly.

Review errors one month after launch. Sometimes, especially if it’s a brand new product, we don’t even know what errors to expect. So we might have to launch with generic errors, but now we have a procedure where we review the errors occurring one month after launch. This allows us to see what really are the biggest errors and write content specifically for those.

Ongoing review process. As writers, we know everything can always be optimized. So we’re constantly reviewing our errors, even the ones we just updated recently.

UX writers are empowered to challenge generic errors. In case a product manager or developer ever says, “Let’s just use this generic error message in all cases”, we now have the power to say no. The CEO of the company has said generic errors are not acceptable, so we’re not going to write them without more investigation and understanding of the problem. The power lies with us!

All in all, we changed thousands of error messages by working together with our colleagues. It was hard work and we all had a drink or two at the end of it. But it was the right thing to do for our users, and the only way to truly live up to our value of putting the user first.

Edited by Dan Raz. Graphics by Yansou Girard.

SNOMED Release Notes

Mike's Notes

I'm rather impressed with the way SNOMED creates its release notes. The URL to the resource is obvious, and the TOC provides in-page navigation to the main content.

Resources

References

  • Reference

Repository

  • Home > Ajabbi Research > Library >
  • Home > Handbook > 

Last Updated

18/05/2025

SNOMED Release Notes

By: Mike Peters
On a Sandy Beach: 19/08/2024

Mike is the inventor and architect of Pipi and the founder of Ajabbi.

Example

Page At A Glance

1. Introduction
1.1. Background
1.2. Purpose
1.3. Scope
1.4. Audience
1.5. Important Information
2. Content Development Activity
2.1. Summary
2.2. Quality Initiative
2.2.1. Update for Pathological Process and Infectious Process
2.2.2. Update Hierarchy 90128006|Photosensitivity (finding)|
2.2.3. Update 230131008|Graft complications (disorder)|
2.2.4. Update Hierarchy 278854009|Insertion of hormone implant (procedure)|
2.3.  Body Structure 
2.3.1. Update Lateralizable Body Structures
2.3.2. SEP and Laterality Anatomy Reference Sets
2.4. Clinical Finding
2.4.1. Inactivation of Mechanical Complication of <x> Disorder Concepts
2.5. Procedure
2.5.1. Radiographic Imaging
2.5.2. Remodel Hierarchy 51302004 |Turbinectomy (procedure)|
2.5.3. Remodel Hierarchy 359890009|Fundoplication (procedure)|
2.6. Pharmaceutical/Biological Product
2.6.1. Grouping Concepts for Therapeutic Roles in the Medicinal Product Hierarchy
2.6.2. Update Pharmaceutical Dose Forms with Two or More Intended Sites
2.7. Collaboration/Harmonization Agreements
2.7.1. Convergent Medical Terminology (CMT)
2.7.2. Orphanet
2.7.3. Cancer Synoptic Reporting
2.7.4. International League Against Epilepsy (ILAE)
2.7.5. Gravity Project
2.8. Internal Quality Improvement
2.8.1. Machine Readable Concept Model (MRCM) Changes
2.8.2. OWL Axiom Expressions for Annotation Properties
2.9. SNOMED CT derived products
2.9.1. ICD-10 map
2.9.2. Content Development Activity Summary
2.9.3. SNOMED CT to OWL conversion and classification
3. Technical notes
3.1. Known Issues
3.2. Resolved Issues
3.3. Technical updates
3.3.1. RF2 package format
3.3.2. Changes to the International Edition package format
3.3.3. Changes to the Annotations Refset format
3.3.4. Changes to the RefsetDescriptor records
3.3.5. Early visibility of impending changes in the upcoming 2024 Monthly International Edition releases
3.3.6. Document links

How Stripe Built a Writing Culture

Mike's Notes

Stripe’s Documentation Manager shares how the company built a culture where writing is second nature. The article is copied from SLAB.

The draft Ajabbi Design System Style Guide is based on the open-source MailChimp Style Guide published on Slab. Many sample or open-source complex documents are available on Slab.

Resources

References

  • Reference

Repository

  • Home > Ajabbi Research > Library >
  • Home > Handbook > 

Last Updated

18/05/2025

How Stripe Built a Writing Culture

By: RC Victorino
SLAB: 02/09/2020

For a company whose product focuses on numbers, Stripe has built an enviable writing culture.

Their quarterly software engineering magazine (Increment) and publishing imprint (Stripe Press) are impressive on their own. But it’s Stripe’s internal writing culture that differentiates the company. Whether it’s an email to a colleague or a memo to an entire team, Stripe employees strive to write with excellence.

Their strong writing culture benefits the organization in several areas:

  1. Time efficiency. Sharing ideas through writing eliminates the need for repetitive verbal updates to disseminate ideas and information.
  2. Knowledge sharing. Documenting important ideas forces clarity of thought and makes information more accessible to everyone in the company, versus slide decks that are ephemeral and require less rigor of thought.
  3. Communication. Clear writing requires clear thinking, meaning employees invest more time shaping their ideas before sharing them.

“Writing forces you to structure your thoughts in a manner just not possible when you verbalize it. When I write, I have to offer structured, precise thoughts.”

Dave Nunez
Documentation Manager at Stripe

The result is that Stripe’s internal and external documentation is a central pillar of the company’s reputation and brand.

How did this happen? We sat down with Stripe’s Documentation Manager, Dave Nunez, to learn more about what it takes to build a strong writing culture.

Leaders must demonstrate quality writing

Getting employees to write more frequently shouldn’t be your ultimate goal. Getting them to write more proficiently should be.

One of the most effective ways to encourage proficient writing is to demonstrate it.

“The first emails I saw from our CEO [Patrick Collison] literally had footnotes,” Nunez recalls. “He structured his emails to be like research papers and put the peripheral information at the bottom so as not to detract from the core information.”

Today, footnotes are a common component of internal emails at Stripe. The CEO set the expectation; employees strive to uphold it. But Collison’s approach to writing did more than demonstrate the value of a footnote. It’s understood that at Stripe:

  1. Writing matters. Make it count.
  2. Everyone’s time is valuable. Make the effort to put together coherent ideas in writing.
  3. The clearer the writing, the clearer your message and intent will be.

Collison isn’t alone in his passion for quality writing. The modus operandi for leadership communications across Stripe is carefully structured narrative documents and emails. You’re far more likely to read a narrative memo during a Stripe project kickoff meeting than to sit through a PowerPoint presentation.

“From leadership on down, we default to writing,” Nunez said. “We don’t really have slide decks.”

How can you lead by example to foster a writing culture? Here are two ideas inspired by the Stripe playbook.

1. Exemplify quality writing in everything you and your leadership team share.

Footnotes might not be right for every company, but strategies anyone can adopt include citing reputable sources, being economical with your words, and ensuring your writing is free from grammar and spelling errors.

As a leader, consider having someone else review your writing for clarity and readability. Then, let your team know you had your writing reviewed. This transparency showcases just how committed you are to increasing the impact of your words.

“You wouldn’t ship code without having it reviewed; your words are just as important,” says Nunez.

2. Make writing the default method of sharing knowledge.

Eschew slide decks for narrative memos. Share new ideas through carefully crafted emails.

When an employee pitches an idea to you, ask them to expand on it in writing.

Show them you value the effort required to convey one’s thoughts into writing by explicitly granting them the time necessary to think through and process their thoughts into writing.

“I’m only a month into my time at Stripe, but I’ve never encountered a tech company of this size where writing is such a center of gravity.”

Shaun Young
Editorial at Stripe

Give teammates a starting point with sample docs

Nunez and his team create sample docs that other teams can use as inspiration for their own documents.

For example, his team published a detailed guide on the life of a Stripe charge. They walked through every step of the process, from the point of sale with the customer, to the back end, bank transactions, and more.

While the content itself was specific to a Stripe charge, the document serves as a valuable reference to other teams on how to write a guide. Teams use this document to understand what type of language to use, to see what types of visuals are most effective, and to learn how to structure their writing for better comprehension (such as when and where to use subheads and lists).

Stripe has similar sample docs for READMEs, runbooks, and FAQs. Nunez believes these sample documents are more useful than fill-in-the-blank templates, because they provide readers more context and content to work with.

“We create docs that offer some of the basics, so engineers aren’t forced to stare at a blank page — which can be terrifying,” Nunez says.

Not every company has a dedicated documentation department. But creating sample documents doesn’t have to be an arduous task. Identify the types of documents most teams would want to produce — then have your most proficient writers create ambitious documents that can be later used as reference documents.

Know when to standardize and when to give autonomy

Standardizing how your team documents shared knowledge ensures content is easy to understand and streamlines the writing process.

But it’s neither scalable nor empowering to standardize everything.

It’s not scalable because it would take constant oversight to ensure every document met a specific format. Few companies have (or are willing to invest in) the resources for this kind of oversight.

It’s not empowering because what works for one team won’t necessarily work for another. Standardizing your entire documentation process robs teams of creating an experience that works best for them.

Stripe toes the line between control and autonomy by establishing a standardized approach for high-leverage documents only — those with a broader audience (like a document intended for multiple teams) or significant implications (like if it impacts business operations).

This approach ensures that the most widely read information receives the oversight it deserves, while teams still maintain autonomy over how they document knowledge most pertinent to them.

In contrast, each team at Stripe has far greater control over the look and feel of documents with a smaller audience and impact.

Standardization at Stripe isn’t represented by a series of templates employees plop their knowledge into like Mad Libs. Rather, standardization at Stripe is more about ensuring the clarity of the content and the reading experience live up to the company standard of quality writing. To ensure this, Nunez typically gets his team involved in reviewing these high-leverage documents before they’re shared.

Replicating this process is straightforward — establish criteria that differentiate high-leverage documents from low-leverage ones. For example, you could define high-leverage documents as:

  • Intended to be read by three or more teams
  • Contains information that will go unchanged for at least one year
  • Will impact general business operations

Documents designated as high-leverage should either follow a specific format, be reviewed by a dedicated team before publication, or both.

Make your documentation easy to read

The point of documenting something is to get others to read it. Without active readers inside your company, your writing culture will never flourish.

So, how do you get people to read what you wrote?

“I think the visual aspect is super important,” Nunez says, “because the first impression tells someone whether the content is approachable or not.”

A visually appealing document doesn’t always contain images and graphics. Nunez has seen beautiful documents that contain no visuals at all.

“You can look at the document and see, ok, this is super simple,” he says. “The intro is very short, there’s bulleted lists down here, and it just gets to the point.”

But, he admits, that’s rare. Visuals and diagrams simplify documents. They make them more approachable, which is why he suggests whenever you can replace text with diagrams, do it.

Diagrams or not, everyone on your team should consider the visual aspect of their writing. Here are a few items to consider:

  • Keep paragraphs short (3–4 sentences). If possible, make the first paragraph of a document 2–3 sentences.
  • Use subheads and bulleted lists to break up walls of text.
  • Consider your audience when writing. Some audiences value complex words — some don’t. The goal is to find the most compelling language for the audience you need to reach and act on your document.
  • Edit frequently. Edit your own work, and ask peers to edit it as well. Editing is the key to getting the best clarification of your idea.

Create a support system

Writing well is not supposed to be easy. Writing well requires more critical thinking (than, say, speaking off the cuff), which produces better results.

The payoff is worth the effort, which is why everyone on your team should strive to be strong writers.

However, sometimes the writing process can create significant barriers that prevent team members from ever sharing their ideas.

Employees who struggle with writing, or whose native language isn’t English, may feel less confident contributing their knowledge.

Nunez has seen this throughout his career — he worries that a company does itself a disservice when some employees don’t feel empowered to share their ideas in a writing-heavy environment.

To address this, he emphasizes the importance of onboarding classes for new hires focused on writing and documentation, as well as office hours, and self-service resources. This demystifies the documentation process — but it also emphasizes just how important documentation is to business operations from the outset.

One thing Nunez is starting to experiment with is pairing ESL employees with writing mentors. He’s done this informally over his career, but would love to see companies create more formal programs for writing mentorships.

“The idea here is that you come with your writing, and a judgment-free expert writer will help you as if they were your college English professor,’” Nunez says.

But even your team’s strongest writers need support. Nunez, for example, is the first to admit that his writing can become long-winded and confusing. So, he regularly shares his work with a handful of colleagues he trusts to offer kind but honest feedback.

Many others across Stripe have colleagues review their work, as well.

“Engineers do this with their code,” he says, “and we do it with our writing.”

Building your culture of writing and documentation

When your CEO uses footnotes in his email and your company publishes full-length books, it’s clear that writing matters.

But you don’t have to be Stripe to develop a culture that embraces writing and documentation. Lead by example; know when to standardize internal writing and when not to; make your documents easy to read; develop a support system that encourages and empowers everyone to write. These are the building blocks from which any company can build a culture where writing and documentation become second nature.

Health systems in New Zealand

Mike's Notes

One of the reasons for creating Pipi is to provide support for health systems.

I have followed SNOMED for several years and participated in an OMG health workflow effort during the COVID lockdown. I did not contribute much, but I learned by watching how a standard's body functions with people working remotely. Ken Rubin skillfully led the effort.

Locally, there is Health Information NZ (HINZ). This is the primary organisation involved in standards and interoperability. The NZ public health system has 3,000 applications that don't integrate and must be fixed. I recently signed up to use SNOMED.

My account at SNOMED CT has been approved.

Resources

References

  • Reference

Repository

  • Home > Ajabbi Research > Library >
  • Home > Handbook > 

Last Updated

18/5/2025

Health systems in New Zealand

By: Mike Peters
On a Sandy Beach: 17/08/2024

Mike is the inventor and architect of Pipi and the founder of Ajabbi.

SNOMED

"SNOMED CT or SNOMED Clinical Terms is a systematically organized computer-processable collection of medical terms providing codes, terms, synonyms and definitions used in clinical documentation and reporting. SNOMED CT is considered to be the most comprehensive, multilingual clinical healthcare terminology in the world.[1][2] The primary purpose of SNOMED CT is to encode the meanings that are used in health information and to support the effective clinical recording of data with the aim of improving patient care. SNOMED CT provides the core general terminology for electronic health records. SNOMED CT comprehensive coverage includes: clinical findings, symptoms, diagnoses, procedures, body structures, organisms and other etiologies, substances, pharmaceuticals, devices and specimens.

SNOMED CT is maintained and distributed by SNOMED International, an international non-profit standards development organization, located in London, UK. SNOMED International is the trading name of the International Health Terminology Standards Development Organisation (IHTSDO), established in 2007" - Wikipedia

Webinar

Topic: Transforming healthcare interoperability with FHIR

12:30pm to 1:30pm, Wednesday 28 August 2024

Watch live or on demand

"FHIR has become a household name as the standard that has moved health data exchange into the modern era.

Experts from both sides of the Tasman will discuss the latest developments using FHIR for joined-up care and better user experience.

This will include an update on the HISO interoperability standards and supporting tools that are Health NZ's delivery priorities in 2024, including the NZ Health Terminology Service (NZHTS), SNOMED CT NZ Edition, and NZ Core Data for Interoperability (NZCDI).

Also hear about developments from the first FHIR Accelerator in Australia, as well as implementation of the New Zealand Patient Summary." - HiNZ

Flat vs. Deep Website Hierarchies

Mike's Notes

Navigation hierarchies are one of the challenges of creating the large documentation sets of Pipi. How deep should they go?

This is relevant to navigation in these pipiCMS publication classes.

  • pipiWiki (similar to MediaWiki)
  • pipiDocs (similar to javaDocs)
  • pipiLearn (similar to Coursera)

I found this excellent article from NN Group in 2013, partially reproduced below.

Resources

References

  • Reference

Repository

  • Home > Ajabbi Research > Library >
  • Home > Handbook > 

Last Updated

18/05/2025

Flat vs. Deep Website Hierarchies

By: Kathryn Whitenton
NNGroup: 10/11/2013

"Summary:  Information can be organized in either flat or deep hierarchies; both have their advantages and pitfalls.

Virtually every website that has more than a few pages uses some structure for organizing the content. The most common (and most easily understood) structure is to categorize pages into groups, often with distinct subgroups. The end result is a hierarchy of content, a structure familiar to most of us from our interactions with organizations, families, and the natural world.

Decisions about exactly how content should be grouped can have dramatic consequences for how your site's structure works (or doesn't work) for users, but these nuances are difficult to understand at first glance. To analyze how a structure will work, we often need to create a visualization that shows a high-level view of how the different pages of a site relate to each other.

Consider these 2 structures: each represents the same amount of information, and shows a perfectly logical way of organizing the content for a website. Yet the end-user's experience of browsing these 2 hierarchies — even if they contain exactly the same information — will be very different. 

...

Representing Hierarchies in the Interface

With flat hierarchies, it's relatively easy for users to understand how any given page relates to other pages, as long as there are some visible navigation menus. But the deeper a hierarchy becomes, the more likely visitors are to become disoriented. For sites that are more than a few levels deep, breadcrumbs (which show a link for each level of the site from the homepage to the current page) can help users orient themselves and understand the site structure. Sitemaps are another useful way of helping users see the structure of a website.

Flat or Deep?

Should your website's hierarchy be flat or deep? Like most design questions, there's no single right answer, and going too far to either extreme will backfire. Flat hierarchies tend to work well if you have distinct, recognizable categories, because people don't have to click through as many levels. When users know what they want, simply get out of the way and let them find it. You can use card sorting to help decide how to structure the information in the way users think about it. Tree testing can help validate the structure by allowing users to attempt to find information in the proposed hierarchy.

But there are exceptions to every rule. In some situations, there are simply too many categories to show them all at one level. In other cases, showing specific topics too soon will just confuse your audience, and users will understand your offerings much better if you include some intermediate category pages to establish context.

Observing your users — via usability testing, analytics, and search logs — can help you understand what problems your audience needs to solve and how familiar users are with your content. This background knowledge is essential to achieving the right balance between a breadth and depth in your hierarchy."- NNGroup