<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Sarj AI Blog</title><description>Articles from Sarj AI.</description><link>https://sarj.ai/blog/</link><language>en-us</language><lastBuildDate>Sun, 13 Sep 2026 00:00:00 GMT</lastBuildDate><atom:link href="https://sarj.ai/blog/rss.xml" rel="self" type="application/rss+xml"/><item><title>How Do You Test a Phone Call?</title><link>https://sarj.ai/blog/2026-09-13-how-do-you-test-a-phone-call-interactive/</link><guid isPermaLink="true">https://sarj.ai/blog/2026-09-13-how-do-you-test-a-phone-call-interactive/</guid><description>Follow Canary, the program that calls Sarj&apos;s own voice service every hour, through one full check. One tap moves the story on by one moment.</description><pubDate>Sun, 13 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;/blog/blog-images/pasted-image-1788078275111.png&quot; alt=&quot;A canary wearing a call-center headset, perched on a telephone wire at night with city lights behind it&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;You make one. Every hour.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Testing a web app is a solved problem. Render the page, click the button, assert the thing. Testing a voice agent, though, is a different story. One call passes through STT, an LLM, TTS, and a real telecom network, live, in sequence. Any link in that chain can quietly break, and the product becomes an awkward silence on a phone line.&lt;/p&gt;
&lt;p&gt;Unit tests don’t catch a carrier misbehaving in the middle of the night. Status pages don’t either; every dependency can be “up” while calls are broken end to end.&lt;/p&gt;
&lt;p&gt;So we built Canary!&lt;/p&gt;
&lt;p&gt;Coal miners kept canaries to notice bad air before it noticed them. Ours makes phone calls. Every hour, a robot caller dials our production stack, over real phone lines, and checks that everything works the way a real caller would experience it.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/blog-images/Untitled%20diagram-2026-08-30-082731.png&quot; alt=&quot;Canary’s hourly loop: dial in like a real caller, run STT, LLM, and TTS over real phone lines, check the whole journey, stay quiet if all is good, page a human if not&quot;&gt;&lt;/p&gt;
&lt;p&gt;We didn’t start by “covering everything”. We started from our clients instead. The first canaries were built around real client flows, the same journeys their callers take every day. If those work, the platform works. From there, Canary grew to cover the platform’s most vital paths. And it doesn’t just check that a call happened: it checks the whole journey, that the agent spoke, the conversation went where it should, and the data landed where it was supposed to, right down to the record in a client’s CRM.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/blog-images/pasted-image-1788078378400.png&quot; alt=&quot;Four canaries perched on a telephone wire at night; three yellow, one with red, green, blue, and yellow feathers&quot;&gt;&lt;/p&gt;
&lt;p&gt;The same machinery scales up, too. Because Canary already knows how to be a caller, it can just as easily be many callers at once. That turns the pipeline into our load-testing rig: waves of concurrent calls against the platform, so we find any capacity limits in a drill we run, not on the day a client launches a big campaign.&lt;/p&gt;
&lt;p&gt;And when something breaks, we don’t find out from a client. Canary alerts us and someone gets paged before anyone else notices.&lt;/p&gt;
&lt;p&gt;Voice AI demos are easy. What our clients get, though, is the guarantee that the call actually gets answered, correctly, at 4am on a Friday. Canary is how we know. It sings every hour, and the whole point is that nobody thinks about it until it stops.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/blog-images/GIF_Looping_animation_a_sing-ezgif.com-video-to-gif-converter.gif&quot; alt=&quot;A canary on a telephone wire singing, sound waves rising from its beak&quot;&gt;&lt;/p&gt;
</content:encoded><dc:creator>Mohammed Alshamrani</dc:creator><media:content type="image/png" medium="image" width="1200" height="630" url="https://sarj.ai/blog/og/2026-09-13-how-do-you-test-a-phone-call-interactive.png"/><media:thumbnail width="1200" height="630" url="https://sarj.ai/blog/og/2026-09-13-how-do-you-test-a-phone-call-interactive.png"/><author>engineering@sarj.ai (Mohammed Alshamrani)</author></item><item><title>Kudos to Kidus: How My Mornings Plan Themselves</title><link>https://sarj.ai/blog/2026-08-16-kudos-to-kidus-how-my-mornings-plan-themselves/</link><guid isPermaLink="true">https://sarj.ai/blog/2026-08-16-kudos-to-kidus-how-my-mornings-plan-themselves/</guid><description>My AI Plans My Day Before</description><pubDate>Sun, 16 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;One day I was talking to my colleague Kidus. He’s a brilliant engineer, and we share so many common traits and ideas. We both love planning. He was sharing his screen explaining something, and I saw an app with tasks inside, so I asked him about it. He said: “Oh, that’s Super Productivity!” It turned out to be the app’s name, not a description. Then he showed me his magical workflow that blew my mind with how powerful yet simple it was!&lt;/p&gt;
&lt;p&gt;Kidus felt the pain of asking yourself every morning: “ok, what do I need to do today? What should I start with? Am I blocking anyone? Any messages I must respond to ASAP?”, then spending at least 30 minutes finding out what you need to do today.&lt;/p&gt;
&lt;p&gt;So he smartly wrote a Claude “kickoff” skill that fetches data from Linear, Slack, GitHub, Google Calendar and Gmail. It compiles everything and dumps it into the SP app. Every morning he just asks Claude to “kickoff” and waits for the magic to happen.&lt;/p&gt;
&lt;p&gt;Of course I asked to use it, and ever since then I’ve been building on top of it and using it every day. I tailored it for myself: for the different hats I’m wearing, for my priorities, for the people I’m leading. It has been a “super productivity” booster for me!&lt;/p&gt;
&lt;p&gt;So Kudos to Kidus!&lt;/p&gt;
&lt;p&gt;Coming up next, I’m gonna show you how my AI keeps my pull requests moving: it chases my reviewers, reviews my own code before anyone else sees it, fixes linting CI errors, and leaves me only the decisions!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/blog-images/kickoff-1080x1350.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
</content:encoded><dc:creator>Fatma Moanes</dc:creator><media:content type="image/png" medium="image" width="1200" height="630" url="https://sarj.ai/blog/og/2026-08-16-kudos-to-kidus-how-my-mornings-plan-themselves.png"/><media:thumbnail width="1200" height="630" url="https://sarj.ai/blog/og/2026-08-16-kudos-to-kidus-how-my-mornings-plan-themselves.png"/><author>engineering@sarj.ai (Fatma Moanes)</author></item><item><title>The Blessings of working at Sarj</title><link>https://sarj.ai/blog/2026-08-16-the-blessings-of-working-at-sarj/</link><guid isPermaLink="true">https://sarj.ai/blog/2026-08-16-the-blessings-of-working-at-sarj/</guid><description>What Makes a Company a Good Company</description><pubDate>Sun, 16 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I joined Sarj as the third engineer ever. We were six people: the CEO, the CTO, one salesperson, and three engineers. I was the third.&lt;/p&gt;
&lt;p&gt;Ever since I joined Sarj, the one thing I’ve always admired about them is how they listen to feedback and ideas. After all, what makes a person feel good about themselves at work? It’s their impact. You can never have a positive impact on someone if they never listen to you… if they are not even willing to listen to you. Sarj has been not just listening to me, but encouraging me to speak more and more. I have seen most of my suggestions and feedback get applied, and have seen the positive impact of it up until this moment. Which makes me really proud.&lt;/p&gt;
&lt;p&gt;What completes it is the culture. How we all communicate with each other… the human aspect of it.&lt;/p&gt;
&lt;p&gt;You spend at least a third of your life at work, it ought to be fun. A simple “how was your weekend” each Sunday morning can do magic! We are humans, not machines, and this is how we should treat each other.&lt;/p&gt;
&lt;p&gt;For the last couple of months, the closest person to my heart has been fighting cancer. What was the team’s reaction to the news? I have seen so much genuine care, love and support from the team, and I’m eternally grateful for that. You might think it’s the normal reaction, but it’s not what I used to see. Nobody is obliged to constantly follow up and ask a colleague about her health every now and then.&lt;/p&gt;
&lt;p&gt;The company = the team. Although we come from 10 different countries, we all speak the same language; we have similar values.&lt;/p&gt;
&lt;p&gt;We believe that proactively engaging with the team, being humble, equally respecting everyone, and holding yourself accountable for your actions, all while being flexible, is what really makes you a Sarj-ian, and what sets you up for success. And of course… to love what you are doing, and have fun while doing it!&lt;/p&gt;
&lt;p&gt;Coming up next, I’m gonna talk about how my career developed at Sarj!&lt;/p&gt;
</content:encoded><dc:creator>Fatma Moanes</dc:creator><media:content type="image/png" medium="image" width="1200" height="630" url="https://sarj.ai/blog/og/2026-08-16-the-blessings-of-working-at-sarj.png"/><media:thumbnail width="1200" height="630" url="https://sarj.ai/blog/og/2026-08-16-the-blessings-of-working-at-sarj.png"/><author>engineering@sarj.ai (Fatma Moanes)</author></item><item><title>Vim-Fu</title><link>https://sarj.ai/blog/vim-fu/</link><guid isPermaLink="true">https://sarj.ai/blog/vim-fu/</guid><description>Does anyone &quot;write&quot; code anymore?</description><pubDate>Mon, 10 Aug 2026 19:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I used to take ferocious pride in my Vim skills. I knew all the hot keys, tricks and tips. I wrote macros, memorized register mappings and even dabbled in Vim script. My Vim-Fu was strong.&lt;/p&gt;
&lt;p&gt;Nowadays, my Vim skills have mostly atrophied. I rarely open a text editor and my .vimrc is outdated and sad. Times have changed. Nobody writes code by hand anymore. Instead we practically will it into existence with AI.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Claude! (or more honestly Codex, we are a Codex household now) build me an Arabic Voice AI platform!&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;While this has made producing software much faster, it has made reading and reviewing software a nightmare. Good code review is careful, methodical and thoughtful. No one has (or should have!) the patience to carefully review thousands of lines of AI generated code each day.&lt;/p&gt;
&lt;p&gt;To help solve this problem we developed the &lt;a href=&quot;https://code-standards.sarj.ai/&quot;&gt;Standards&lt;/a&gt; linting tool. The tool is three years of code reviews (as well as most of my software career’s learnings) compressed into 100+ deterministic linting rules. The linter runs as part of our pre-commit process. Whenever an AI agent writes a line of code and tries to commit, the linter analyzes the code and automatically flags violations. The fixes are then made by the agent without the developer having to think about it.&lt;/p&gt;
&lt;p&gt;Some of these rules are simple syntactic idioms. For example, in rule &lt;a href=&quot;https://code-standards.sarj.ai/rules/sql/prefer-uuidv7-default/&quot;&gt;SARJ109&lt;/a&gt; we enforce &lt;code&gt;uuidv7&lt;/code&gt; and prohibit &lt;code&gt;uuidv4&lt;/code&gt; as &lt;code&gt;uuidv7&lt;/code&gt; has desirable performance benefits. However, other rules like &lt;a href=&quot;https://code-standards.sarj.ai/rules/python/stepdown/&quot;&gt;SARJ023&lt;/a&gt; encapsulate more complicated / judgment based concepts like the stepdown rule. (For reference the &lt;a href=&quot;https://dzone.com/articles/the-stepdown-rule&quot;&gt;stepdown&lt;/a&gt; rule is a concept that promotes more readable code by mandating that public functions appear first in a source file.) New rules are constantly being created and pre-existing rules grow and expand over time.&lt;/p&gt;
&lt;p&gt;My hope is that the tool will allow us to write high quality / correct code while not losing the speed benefits that AI gives us. I don’t know what the future of coding will look like. However, I am certain that guardrails, linters, verification layers, etc. will be more important than ever.&lt;/p&gt;
</content:encoded><dc:creator>Nasr Maswood</dc:creator><media:content type="image/png" medium="image" width="1200" height="630" url="https://sarj.ai/blog/og/vim-fu.png"/><media:thumbnail width="1200" height="630" url="https://sarj.ai/blog/og/vim-fu.png"/><author>engineering@sarj.ai (Nasr Maswood)</author></item></channel></rss>