<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Sorry Engineering by Rafal Makara]]></title><description><![CDATA[Common sense driven Engineering Management]]></description><link>https://www.sorryengineering.com</link><image><url>https://www.sorryengineering.com/img/substack.png</url><title>Sorry Engineering by Rafal Makara</title><link>https://www.sorryengineering.com</link></image><generator>Substack</generator><lastBuildDate>Tue, 05 May 2026 10:42:49 GMT</lastBuildDate><atom:link href="https://www.sorryengineering.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Rafal Makara]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[rafalmakara@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[rafalmakara@substack.com]]></itunes:email><itunes:name><![CDATA[Rafal Makara]]></itunes:name></itunes:owner><itunes:author><![CDATA[Rafal Makara]]></itunes:author><googleplay:owner><![CDATA[rafalmakara@substack.com]]></googleplay:owner><googleplay:email><![CDATA[rafalmakara@substack.com]]></googleplay:email><googleplay:author><![CDATA[Rafal Makara]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Model Architecture: seq2seq]]></title><description><![CDATA[A model architecture defines how a machine learning model is structured&#8212;how data flows through it, how different components interact, and how it makes predictions.]]></description><link>https://www.sorryengineering.com/p/model-architecture-seq2seq</link><guid isPermaLink="false">https://www.sorryengineering.com/p/model-architecture-seq2seq</guid><dc:creator><![CDATA[Rafal Makara]]></dc:creator><pubDate>Wed, 12 Feb 2025 23:58:09 GMT</pubDate><content:encoded><![CDATA[<p>A model architecture defines how a machine learning model is structured&#8212;how data flows through it, how different components interact, and how it makes predictions.</p><p>There have been quiet a few model architectures. Right now, Transformer architecture dominates the field.</p><p>But before Transformer, Seq2Seq (Sequence-to-Sequence) was the big thing.</p><h2><strong>How does Seq2Seq work?</strong></h2><p>Seq2Seq is built with two main components:</p><p>&#8226; <strong>Encoder</strong>: Processes the input.</p><p>&#8226; <strong>Decoder</strong>: Generates the output.</p><p>Both work with sequences of tokens and, in the classic approach, use Recurrent Neural Networks (RNNs) or their more powerful versions&#8212;LSTMs and GRUs.</p><ol><li><p>The <strong>encoder</strong> reads the input sequence step by step, updating its hidden state at each time step.</p></li><li><p>The <strong>final hidden state</strong> after processing the last input token represents the entire input sequence.</p></li><li><p>The <strong>decoder</strong> receives this final hidden state as its initial state and starts generating the output sequence, token by token.</p></li></ol><p>Metaphor used in "AI Engineering" book was: working with final hidden state is like answering questions about a book based on just the summary. The final hidden state tries to capture everything from the input, but some details may get lost.</p><p>Since RNNs work sequentially, we must process the entire input before generating even the first output token. The longer the input, the longer we wait before we get anything in return. It doesn&#8217;t create the best UX for the chatbots.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NlO_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41e9dff0-89bd-422d-bfb5-8eaa8bfa502d_2404x328.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NlO_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41e9dff0-89bd-422d-bfb5-8eaa8bfa502d_2404x328.png 424w, https://substackcdn.com/image/fetch/$s_!NlO_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41e9dff0-89bd-422d-bfb5-8eaa8bfa502d_2404x328.png 848w, https://substackcdn.com/image/fetch/$s_!NlO_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41e9dff0-89bd-422d-bfb5-8eaa8bfa502d_2404x328.png 1272w, https://substackcdn.com/image/fetch/$s_!NlO_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41e9dff0-89bd-422d-bfb5-8eaa8bfa502d_2404x328.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NlO_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41e9dff0-89bd-422d-bfb5-8eaa8bfa502d_2404x328.png" width="1456" height="199" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/41e9dff0-89bd-422d-bfb5-8eaa8bfa502d_2404x328.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:199,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:70798,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NlO_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41e9dff0-89bd-422d-bfb5-8eaa8bfa502d_2404x328.png 424w, https://substackcdn.com/image/fetch/$s_!NlO_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41e9dff0-89bd-422d-bfb5-8eaa8bfa502d_2404x328.png 848w, https://substackcdn.com/image/fetch/$s_!NlO_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41e9dff0-89bd-422d-bfb5-8eaa8bfa502d_2404x328.png 1272w, https://substackcdn.com/image/fetch/$s_!NlO_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41e9dff0-89bd-422d-bfb5-8eaa8bfa502d_2404x328.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>After some time, the problem of not looking back at original input tokens (but only at the Final Hidden State) got solved by the Attention Mechanism. But this is a story for another time. </p><div><hr></div><p>Sources:</p><ul><li><p><em>AI Engineering by Chip Huyen (O&#8217;Reilly). Copyright 2025 Developer Experience Advisory LLC, 978-1-098-16630-4</em></p></li><li><p><em>https://d2l.ai/chapter_recurrent-modern/seq2seq.html</em></p></li><li><p><em>https://arxiv.org/abs/1409.3215v3</em></p></li></ul>]]></content:encoded></item><item><title><![CDATA[What is Inference Optimization?]]></title><description><![CDATA[It sounds like a smart term.]]></description><link>https://www.sorryengineering.com/p/what-is-inference-optimization</link><guid isPermaLink="false">https://www.sorryengineering.com/p/what-is-inference-optimization</guid><dc:creator><![CDATA[Rafal Makara]]></dc:creator><pubDate>Sat, 08 Feb 2025 22:53:41 GMT</pubDate><content:encoded><![CDATA[<p>It sounds like a smart term. In simple words, it is about making models faster and cheaper. It involves techniques to reduce computational costs, latency, and memory usage while maintaining or improving model accuracy.</p><p>If a chatbot generates a response of 300 tokens, with each token taking 10 milliseconds to produce, the user experience will be significantly better than if each token took 100 milliseconds to generate. </p><p>At this moment, I do not know much about inference optimization techniques. Perplexity says there are such as: pruning, quantization, knowledge distillation, weight sharing, low-rank factorization, early exit mechanisms, deployment strategy, caching and memoization, parallelism and batching. And probably more.</p><div><hr></div><p>Sources:</p><ul><li><p><em>AI Engineering by Chip Huyen (O&#8217;Reilly). Copyright 2025 Developer Experience Advisory LLC, 978-1-098-16630-4</em></p></li><li><p><em>Perplexity</em></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Dataset Engineering]]></title><description><![CDATA[Dataset engineering refers to designing, collecting, curating, generating, annotating, optimizing the data needed for training and adapting AI models.]]></description><link>https://www.sorryengineering.com/p/dataset-engineering</link><guid isPermaLink="false">https://www.sorryengineering.com/p/dataset-engineering</guid><dc:creator><![CDATA[Rafal Makara]]></dc:creator><pubDate>Sat, 08 Feb 2025 22:40:49 GMT</pubDate><content:encoded><![CDATA[<p>Dataset engineering refers to designing, collecting, curating, generating, annotating, optimizing the data needed for training and adapting AI models.</p><p>Imagine two problem types: classification and open chat response.</p><p>In <strong>closed-ended models</strong>, such as traditional classification models, dataset engineering is straightforward. For example, labeling an image as &#8220;cat&#8221; or &#8220;not a cat&#8221; is a well-defined task with clear ground truth.</p><p>However, in <strong>open-ended models</strong>, such as foundation models, dataset engineering becomes more complex. Since these models (through e.g. chatbot UI) can generate responses in an almost unlimited number of ways, it extends beyond simple labeling. Instead, dataset engineering focuses on tasks like deduplication, tokenization, context retrieval, quality control, removal of sensitive information.</p><p>How to prepare datasets, so specific model can train effectively on them?</p><div><hr></div><p>Sources:</p><ul><li><p><em>AI Engineering by Chip Huyen (O&#8217;Reilly). Copyright 2025 Developer Experience Advisory LLC, 978-1-098-16630-4</em></p></li><li><p><em>Additional research</em></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Pre-training, Finetuning, Post-training]]></title><description><![CDATA[Training is deeply associated with the process of adjusting the model weights.]]></description><link>https://www.sorryengineering.com/p/pre-training-finetuning-post-training</link><guid isPermaLink="false">https://www.sorryengineering.com/p/pre-training-finetuning-post-training</guid><dc:creator><![CDATA[Rafal Makara]]></dc:creator><pubDate>Sat, 08 Feb 2025 22:14:20 GMT</pubDate><content:encoded><![CDATA[<p>Training is deeply associated with the process of adjusting the model weights. While prompt engineering influences the output by modifying the the given input/context, prompt engineering doesn&#8217;t change the model weights.</p><p><strong>Pre-training</strong>, training a model from scratch. Model weights are initialised. Then huge amount of training data is processed to adjust the model weights. This is the most resource-intensive phase. </p><p><strong>Finetuning</strong>, continuation of the training with the weights obtained from the previous training sessions. This process usually uses much smaller or specialised dataset.</p><p><strong>Post-training</strong>, from one perspective, the finetuning and the post-training are the same as both happen after the model is pre-trained as the mission of both is to improve the model. </p><h2>Finetuning vs Post-training</h2><p>Then, what&#8217;s the difference between finetuning and post-training? </p><p>I am not sure if this widely accepted definition, but in the context of foundation models, according to the book, finetuning is made by users of foundation models, while post-training is made by the foundation model engineers. There might be also a difference in a goal. </p><p>If you&#8217;re building your end-user facing application on top of OpenAI, and you decide to adjust the weights of the existing model, then you do finetuning. At this point, your finetuning will be probably targeting your specific use cases (e.g. domain) of the model to make the model more accurate and knowledgable in your context. </p><p>If you&#8217;re building your end-user facing application on top of OpenAI, and they decide to adjust the weights of the existing model, then they do post-training. For example, they can apply Reinforcement Learning from Human Feedback (RLHF) to align the model with human values, ethical principles, and intended use cases.</p><p>The last phase, post-training, which may use RLHF doesn&#8217;t necessarily adjust the weights, but might apply some output filtering techniques. So, training is not always about adjusting the weights?</p><div><hr></div><p>Sources:</p><ul><li><p><em>AI Engineering by Chip Huyen (O&#8217;Reilly). Copyright 2025 Developer Experience Advisory LLC, 978-1-098-16630-4</em></p></li><li><p><em>Additional research</em></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Basic Layers of AI Systems]]></title><description><![CDATA[We&#8217;ve had a lot of time to get used to lots of architectural approaches for building applications.]]></description><link>https://www.sorryengineering.com/p/basic-layers-of-ai-systems</link><guid isPermaLink="false">https://www.sorryengineering.com/p/basic-layers-of-ai-systems</guid><dc:creator><![CDATA[Rafal Makara]]></dc:creator><pubDate>Sat, 08 Feb 2025 21:43:49 GMT</pubDate><content:encoded><![CDATA[<p>We&#8217;ve had a lot of time to get used to lots of architectural approaches for building applications. In the AI world, there are a few as well. The most basic one, seems to be:</p><ul><li><p>Application Development Layer</p><ul><li><p>AI Interface</p></li><li><p>Prompt engineering</p></li><li><p>Context construction</p></li><li><p>Evaluation</p></li></ul></li><li><p>Model Development Layer</p><ul><li><p>Inference optimization</p></li><li><p>Dataset engineering</p></li><li><p>Modeling &amp; training</p></li><li><p>Evaluation</p></li></ul></li><li><p>Infrastructure Layer</p><ul><li><p>Compute management</p></li><li><p>Data management</p></li><li><p>Serving</p></li><li><p>Monitoring</p></li></ul></li></ul><div><hr></div><p>Sources:</p><ul><li><p><em>AI Engineering by Chip Huyen (O&#8217;Reilly). Copyright 2025 Developer Experience Advisory LLC, 978-1-098-16630-4</em></p></li></ul>]]></content:encoded></item><item><title><![CDATA[First thoughts on AI Metrics]]></title><description><![CDATA[While non-AI software engineering world is still getting used to metrics, metrics are an important part of AI world as well.]]></description><link>https://www.sorryengineering.com/p/first-thought-on-ai-metrics</link><guid isPermaLink="false">https://www.sorryengineering.com/p/first-thought-on-ai-metrics</guid><dc:creator><![CDATA[Rafal Makara]]></dc:creator><pubDate>Sat, 08 Feb 2025 21:38:56 GMT</pubDate><content:encoded><![CDATA[<p>While non-AI software engineering world is still getting used to metrics, metrics are an important part of AI world as well.</p><p>There might be such: </p><ul><li><p>Quality of the chatbot responses. Thumbs up. Thumbs down.</p></li><li><p>Chat message follow-up rate. </p></li><li><p>Accuracy. Precision. Recall. R1 Score. Hallucination rate.</p></li><li><p>Inference Latency. Time to first token. Time per full answer. Time per token.</p></li><li><p>P70, P95 tokens per response. Tokens per prompt.</p></li><li><p>Memory usage. GPU/CPU Utilization.</p></li><li><p>Cost per job.</p></li><li><p>Median, P75 of agents involved in a job.</p></li><li><p>Energy consumption.</p></li><li><p>Labeling accuracy. </p></li><li><p>Error rates.</p></li></ul><p>There are more. Will be more. Some will be valuable in a given context and time. The other ones will be pointless. </p><div><hr></div><p>Sources:</p><ul><li><p><em>AI Engineering by Chip Huyen (O&#8217;Reilly). Copyright 2025 Developer Experience Advisory LLC, 978-1-098-16630-4</em></p></li><li><p><em>Additional research</em></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Agents, learnings from Anthropic]]></title><description><![CDATA[Agents, Agentic Workflows and Workflow Patterns]]></description><link>https://www.sorryengineering.com/p/agents</link><guid isPermaLink="false">https://www.sorryengineering.com/p/agents</guid><dc:creator><![CDATA[Rafal Makara]]></dc:creator><pubDate>Wed, 05 Feb 2025 23:16:59 GMT</pubDate><content:encoded><![CDATA[<h2>What&#8217;s an Agent?</h2><p>Agents function like workflows, but with AI deciding what process or tool to use next. </p><p>Most agents are just LLMs using external tools&#8212;taking in data, making decisions, and acting accordingly. They are LLMs with enhancements like retrieval, tool integration, and memory.</p><p>There&#8217;s a trade-off: higher costs, more compute, and sometimes slower execution. But in return, you gain flexibility&#8212;fewer hardcoded conditions and more dynamic problem-solving.</p><h2>Agentic Workflows</h2><p>Different patterns shape how agentic workflows operate. A few examples:</p><ul><li><p><strong>Prompt Chaining:</strong> Breaks tasks into steps for better results.<br><em>Example: Generate marketing copy &#8594; Translate &#8594; Format.</em></p></li><li><p><strong>Routing:</strong> Directs tasks to the right process.<br><em>Example: FAQ bot for general queries, automation for refunds, AI for tech support.</em></p></li><li><p><strong>Sectioning:</strong> Splits work across multiple models.<br><em>Example: One model generates responses, another moderates content.</em></p></li><li><p><strong>Voting:</strong> Runs multiple times for accuracy, enabling models to challenge each other.<br><em>Example: Content moderation using three models to balance false positives.</em></p></li><li><p><strong>Orchestrator-Workers:</strong> A central LLM assigns tasks to worker models&#8212;similar to map-reduce for LLMs.<br><em>Example: Separate research workers doing the research, which gets aggregated later.</em></p></li><li><p><strong>Evaluator-Optimizer:</strong> One LLM generates, another evaluates and refines, creating a self-improvement loop.<br>Example: Preparing the feedback and improving it execution-by-execution.</p></li></ul><p>Agentic workflows have best practices, design patterns, and bad smells&#8212;just like coding.</p><div><hr></div><p>Sources:</p><ul><li><p>https://www.anthropic.com/research/building-effective-agents</p></li></ul>]]></content:encoded></item><item><title><![CDATA[Workflows: Learnings from Gumloop]]></title><description><![CDATA[Subflows, simple UIs, Chrome Extension, Custom Nodes]]></description><link>https://www.sorryengineering.com/p/learnings-from-gumloop</link><guid isPermaLink="false">https://www.sorryengineering.com/p/learnings-from-gumloop</guid><dc:creator><![CDATA[Rafal Makara]]></dc:creator><pubDate>Tue, 04 Feb 2025 22:16:14 GMT</pubDate><content:encoded><![CDATA[<p>I watched <a href="https://www.youtube.com/watch?v=QFc7jXZ2pdE">this Gumloop presentation</a>. I personally use <strong>n8n</strong>, but I like checking out alternatives to get inspired by them. For sure, Gumloop is a product worth looking at.</p><h3><strong>Subflows Are Like Functions</strong></h3><p>Workflows often repeat the same steps. Gumloop has subflows, which let you reuse parts of a workflow instead of rebuilding the same logic again. It&#8217;s like writing functions in code.</p><p>If you have 20 different workflows, but all of them end with sending a Slack message written in a way aligned with your writing style - it can be a subflow.</p><h3><strong>Simple UI for Execution</strong></h3><p>Gumloop lets you create a basic website/HTML form with a few text fields for input parameters. You fill them in, click a button, and the workflow runs. Such forms can be shared with non-technical users.</p><p>Of course, without this functionality, you could setup such a website on your own and implement a button to call a webhook executing the workflow. However, it&#8217;s cool to see that they have a feature for it.</p><h3><strong>Chrome Extension for Instant Automation</strong></h3><p>Gumloop comes with a Chrome extension that lets you grab content from a currently opened website and send it as input to a workflow. One-click, and automation kicks in, already populated with the content from the website. Faster than copy&amp;paste. Much easier than URL scrapping, especially for pages behind authorization. </p><h3><strong>Building Custom Nodes in AI-Powered Way</strong></h3><p>Gumloop supports custom nodes, letting you connect to third-party data sources that aren&#8217;t natively integrated. But what stood out in the video? The process. You copy &amp; paste the API documentation of a service that isn&#8217;t yet supported, and Gumloop&#8217;s AI generates the custom node for you. No manual coding, no complex setup&#8212;just an instant, AI-assisted connector, ready to be used in your workflows.</p><div><hr></div><p>Sources:</p><ul><li><p><a href="https://www.youtube.com/watch?v=QFc7jXZ2pdE">https://www.youtube.com/watch?v=QFc7jXZ2pdE</a></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Prompts: Zero-shot, Few-shot, Chain-of-Thought]]></title><description><![CDATA[How to prompt?]]></description><link>https://www.sorryengineering.com/p/prompts-zero-shot-few-shot-chain</link><guid isPermaLink="false">https://www.sorryengineering.com/p/prompts-zero-shot-few-shot-chain</guid><dc:creator><![CDATA[Rafal Makara]]></dc:creator><pubDate>Tue, 04 Feb 2025 21:28:34 GMT</pubDate><content:encoded><![CDATA[<h2><strong>Zero-shot prompting</strong></h2><p>Zero-shot prompting means that the prompt used to interact with the model does not contain examples. </p><p>Prompt:</p><blockquote><p>Classify the text into neutral, negative or positive. </p><p>Text: I think the vacation is okay.</p><p>Sentiment:</p></blockquote><h2><strong>Few-shot prompting</strong></h2><p>Few-shot prompting provides examples in the prompt to steer the model to better performance.</p><p>Prompt:</p><blockquote><p>This is awesome! // Negative</p><p>This is bad! // Positive</p><p>Wow that movie was rad! // Positive</p><p>What a horrible show! //</p></blockquote><h2><strong>Chain-of-Thought</strong></h2><p>Chain-of-Thought prompting provides an example of a reasoning process in a prompt, that the model can learn from. The sentence <em>&#8220;let&#8217;s take it step by step&#8221;</em> works like magic.</p><p>Prompt:</p><blockquote><p>Q: Bulb of garlic has 9 cloves. I ate 5 of them. I bought another bulb of garlic. How many cloves do I have?</p><p>A: Let's take it step-by-step. You had 9 cloves in a single bulb. You ate 5 cloves, after that you had 4 cloves left. You bought another bulb, assuming it also has 9 cloves. So you have 9+4 cloves in total, which is 13 cloves.</p><p>Q: My plant gives 3 new flowers every week. One of them dies every 2 weeks. If I buy one more plant in the second week. How many flowers I am going to have after 4 weeks?</p><p>A: </p></blockquote><p>I haven&#8217;t shared the answers that the model gave me. Try it yourself. </p><div><hr></div><p>Sources:</p><ul><li><p>https://www.promptingguide.ai/</p></li></ul>]]></content:encoded></item><item><title><![CDATA[Tokens and Vocabulary]]></title><description><![CDATA[["I", "would", "n", "'", "t", "like", "to", "go", "to", "the", "gym", "today", "because", "I", "am", "sick"]]]></description><link>https://www.sorryengineering.com/p/tokens-and-vocabulary</link><guid isPermaLink="false">https://www.sorryengineering.com/p/tokens-and-vocabulary</guid><dc:creator><![CDATA[Rafal Makara]]></dc:creator><pubDate>Sun, 02 Feb 2025 10:08:12 GMT</pubDate><content:encoded><![CDATA[<p>Phrase:</p><ul><li><p>&#8220;I wouldn&#8217;t like to go to the gym today because I am sick&#8221;</p></li></ul><p>might be split into the tokens (depending on the model) like:</p><ul><li><p>["I", "would", "n", "'", "t", "like", "to", "go", "to", "the", "gym", "today", "because", "I", "am", "sick"]</p></li></ul><h2>Why tokenization?</h2><ul><li><p>Tokens are more meaningful than single characters. </p></li><li><p>There are fewer unique tokens, than words. Also <em>&#8220;ing&#8221;</em> token in English is quiet common. Making model more efficient.</p></li><li><p>Tokens help with unknown words, like &#8220;bananing&#8221;, which is made of &#8220;banana&#8221; and &#8220;ing&#8221;.</p></li></ul><h2>Vocabulary</h2><p>Set of all tokens a model can work with is the model&#8217;s vocabulary. </p><div><hr></div><p>Sources:</p><ul><li><p><em>AI Engineering by Chip Huyen (O&#8217;Reilly)</em></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Supervision and Self-supervision]]></title><description><![CDATA[Is labeled training date necessary?]]></description><link>https://www.sorryengineering.com/p/supervision-and-self-supervision</link><guid isPermaLink="false">https://www.sorryengineering.com/p/supervision-and-self-supervision</guid><dc:creator><![CDATA[Rafal Makara]]></dc:creator><pubDate>Sun, 02 Feb 2025 10:06:22 GMT</pubDate><content:encoded><![CDATA[<p><strong>Supervision</strong> means training a model using labeled data. You show it two pictures&#8212;one labeled as &#8220;cat&#8221; and the other not labelled as &#8220;cat&#8221;. The model learns to recognize pictures with cats.</p><p><strong>Self-supervision</strong> means learning directly from the input data itself. Take the phrase: <em>&#8220;Sky is blue and beautiful.&#8221;</em> The model treats it as a training sequence: 1. Sky; 2. Sky is; 3. Sky is blue; 4. Sky is blue and; 5. Sky is blue and beautiful. It learns patterns and context without explicit labels, learns even from inputs.</p><div><hr></div><p>Sources:</p><ul><li><p><em>AI Engineering by Chip Huyen (O&#8217;Reilly). Copyright 2025 Developer Experience Advisory LLC, 978-1-098-16630-4</em></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Key AI Model Types and Concepts]]></title><description><![CDATA[LM, LLM, MMM, GPM, FM, MLEng, AIEng]]></description><link>https://www.sorryengineering.com/p/key-ai-model-types-and-concepts</link><guid isPermaLink="false">https://www.sorryengineering.com/p/key-ai-model-types-and-concepts</guid><dc:creator><![CDATA[Rafal Makara]]></dc:creator><pubDate>Sun, 02 Feb 2025 10:05:03 GMT</pubDate><content:encoded><![CDATA[<p><strong>Language Models (LMs)</strong></p><p>Language Models are based on statistical patterns learned from one or more languages. If they complete sentences like <strong>&#8220;My favorite color is _&#8221;</strong>, then it is <strong>autoregressive language model</strong> predicting the next word. Alternatively, when they fill in the blanks in sentences like <strong>&#8220;My favorite _ is blue&#8221;</strong>, then this is <strong>masked language model</strong>.</p><p><strong>Large Language Models (LLMs)</strong></p><p>The key difference between a standard language model and a large language model is <strong>scale</strong>&#8212;LLMs are trained on <strong>larger datasets, have more parameters, and require greater computational power</strong>, making them significantly more capable. Size matters.</p><p><strong>Multimodal Models</strong></p><p>Unlike traditional language models that process only text, <strong>multimodal models</strong> can handle multiple types of input, such as <strong>text, images, audio, and speech</strong>, enabling more complex interactions and understanding.</p><p><strong>Task-Specific Models</strong></p><p>These models are <strong>optimized for a single function</strong>&#8212;for example, a translation model can convert text between languages but <strong>cannot</strong> perform sentiment analysis. They are highly efficient but limited in scope.</p><p><strong>General-Purpose Models</strong></p><p>These models are <strong>versatile</strong> and can handle multiple tasks, such as <strong>translation, sentiment analysis, and more</strong>, without requiring significant modifications.</p><p><strong>Foundation Models</strong></p><p>S<strong>ubcategory of general-purpose models</strong>, serving as a <strong>base for building AI applications</strong>. Thanks to them gazillions of startups can call themselves &#8220;AI Startup&#8221;.</p><p><strong>ML Engineering</strong></p><p>Machine Learning Engineering involves not only developing end-user applications but also designing, training, and optimizing machine learning models. It is sometimes referred to as <strong>MLOps, AIOps, or LLMOps</strong>. When we had no Foundation Models, that was the way to go.</p><p><strong>AI Engineering</strong></p><p>AI Engineering is the <strong>process of building applications on top of Foundation Models</strong>, making AI accessible and easy to use for most of us.</p><div><hr></div><p>Sources:</p><ul><li><p><em>AI Engineering by Chip Huyen (O&#8217;Reilly)</em></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Fast Answers vs. Smart Answers]]></title><description><![CDATA[Do you want to sound smart or be smart? Fast answers rely on past knowledge, while slow answers create new thoughts. Take your time to think. It&#8217;s worth it.]]></description><link>https://www.sorryengineering.com/p/fast-answers-vs-smart-answers</link><guid isPermaLink="false">https://www.sorryengineering.com/p/fast-answers-vs-smart-answers</guid><dc:creator><![CDATA[Rafal Makara]]></dc:creator><pubDate>Thu, 30 Jan 2025 07:00:50 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e1f78f4c-a0ef-48c7-867b-ef9a8034fab4_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I tend to answer fast.</p><p>It feels natural. It keeps conversations dynamic. It makes me sound sharp.</p><p>But is it always the best approach?</p><h3><strong>Thinking Takes Effort</strong></h3><p>When we answer a question instantly, we pull from what we already know&#8212;past knowledge, past thoughts, past conclusions.</p><p>It&#8217;s efficient. But is it learning?</p><p>Generating new thoughts requires thinking. And thinking requires time.</p><p>Kahneman would say: thinking fast or slow. </p><h3><strong>The Power of Slower Answers</strong></h3><p>When I work asynchronously, I have time to process. I pause. I reflect. My responses become more thoughtful, more refined.</p><p>In live discussions, or days with back-to-back meetings, conversations move fast. </p><p>I need to learn to <strong>create space for thinking</strong>.</p><h3><strong>Do You Want to Sound Smart or Be Smart?</strong></h3><p>Quick answers can make you sound sharp. Slow answers can make your answers sharp.</p><p>The next time someone asks a question, pause.</p><p>Take a breath.</p><p>Do you want to repeat what you&#8217;ve already known or connect the dots differently?</p><p>Take your time to think. </p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.sorryengineering.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Sorry Engineering by Rafal Makara! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Interviewing Like Hosting a Podcast]]></title><description><![CDATA[Transforming job interviews into engaging podcast-style conversations. In this post, Rafal Makara shares how empathy, storytelling, and curiosity create dynamic, collaborative interviews that reveal genuine insights&#8212;moving beyond checklist questions and AI-generated responses. Discover a fresh approach to understanding candidates and building connections.]]></description><link>https://www.sorryengineering.com/p/interviewing-like-hosting-a-podcast</link><guid isPermaLink="false">https://www.sorryengineering.com/p/interviewing-like-hosting-a-podcast</guid><dc:creator><![CDATA[Rafal Makara]]></dc:creator><pubDate>Fri, 24 Jan 2025 08:01:39 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/5543167f-611f-41a1-886f-c58a782433c6_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I listened to many podcasts. Let&#8217;s interview candidates like that.</p><h3>Guide, then Listen between the Lines</h3><p>We start with introductions&#8212;me as the &#8220;host&#8221; and the candidate as the &#8220;guest&#8221;. </p><p>I share a bit about us, team, position, needs. As it doesn&#8217;t start as an interrogation, their breath stabilises, heart rate slows down. They get curious and ask questions.</p><p>Instead of grilling with a checklist questions, I ask them to <a href="https://www.sorryengineering.com/p/two-ways-to-ask-a-question">tell me about</a> a project or feature they built. I want to hear how they talk about it.</p><p>I guide by asking drill down questions about spark of an idea, analytical process, through development, to the final deployment, release and production issues. </p><p>It&#8217;s about understanding how they think, how they solve problems, what gets them excited, what they focus on when telling a story, what they skip, what they are passionate about, what bores them, what they see as a success.</p><p>From time to time, I tell follow-up stories about how we do things. It makes us feel equal in bi-directional conversation. </p><p>Interview ends with <em><a href="https://www.sorryengineering.com/p/what-makes-a-project-big">&#8220;Is there something I haven&#8217;t asked that you would like to share?&#8221;</a></em>. This often reveals some of the most genuine insights. </p><h3>Empathy Matters in Interviews</h3><p>This podcast-inspired approach requires empathy. It keeps interviews dynamic and collaborative, and it gives guests a chance to show who they are. </p><p>In the AI era, software can record my voice, and it can generate answers for the candidate. Automatically generated answers seem unnatural. Checklist questions seem stressful. </p><p>Stories, <a href="https://www.sorryengineering.com/p/stop-asking-why-and-start-asking-what">curiosity</a>, follow-ups and live collaboration. Period.</p><p>&#8230;</p><p><em>I hope the candidates really feel this way, and this is not only my perception. :)</em></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.sorryengineering.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Sorry Engineering by Rafal Makara! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p> </p>]]></content:encoded></item><item><title><![CDATA[Efficient over Fast]]></title><description><![CDATA[I recently listened to a podcast with Prof. Antoni Krzeski, a laryngological surgeon and former hospital head. He shared an interesting idea: he has banned the use of the words &#8220;fast&#8221; and &#8220;easy&#8221; when talking about surgeries. Instead, he encourages doctors to use the word &#8220;efficiently&#8221;. While it means something similar, it avoids making surgeries sound simpler than they really are. Over his career, he has performed tens of thousands of surgeries, so his opinion is worth considering.]]></description><link>https://www.sorryengineering.com/p/efficient-over-fast</link><guid isPermaLink="false">https://www.sorryengineering.com/p/efficient-over-fast</guid><dc:creator><![CDATA[Rafal Makara]]></dc:creator><pubDate>Fri, 10 Jan 2025 08:59:40 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7ecb8187-922f-4576-ac89-3d6bfa1b37c5_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I recently listened to a <a href="https://www.youtube.com/watch?v=9k-o7bOI76s">podcast with Prof. Antoni Krzeski</a>, a laryngological surgeon and former hospital head. He shared an interesting idea: he has banned the use of the words <em>&#8220;fast&#8221;</em> and <em>&#8220;easy&#8221;</em> when talking about surgeries. Instead, he encourages doctors to use the word <em>&#8220;efficiently&#8221;.</em> While it means something similar, it avoids making surgeries sound simpler than they really are. Over his career, he has performed tens of thousands of surgeries, so his opinion is worth considering.</p><p>This idea also applies to IT. In our field, being efficient is important for a company&#8217;s success. The more often IT companies can iterate, the better results they usually achieve. We could say <em>&#8220;the faster companies iterate, the better results they usually achieve&#8221;,</em> but I like the idea of avoiding words like <em>&#8220;fast&#8221;</em>, <em>&#8220;quick&#8221; and &#8220;easy&#8221;.</em></p><p>The words we use matter. When senior people tell junior team members something should be <em>&#8220;fast&#8221;</em> or <em>&#8220;easy&#8221;</em> it can add extra pressure and make them think, <em>&#8220;Am I not good enough if I can&#8217;t do this quickly?&#8221;</em></p><p>I prefer the word <em>&#8220;efficient&#8221;.</em> It feels more connected to quality and helps focus on doing things thoughtfully instead of rushing.</p><p>And by the way, thank you, Micha&#322; and Tomek, for pushing me to start writing again.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.sorryengineering.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Sorry Engineering by Rafal Makara! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[How to implement DORA Metrics in 1 day?]]></title><description><![CDATA[In 2010, way before the State of DevOps and Accelerate were published, we were discussing the frequency of releases, failures, recoveries and the time it takes to get something done - in a company in which, we were using an FTP server for doing multiple deployments a day.]]></description><link>https://www.sorryengineering.com/p/how-to-implement-dora-metrics-in</link><guid isPermaLink="false">https://www.sorryengineering.com/p/how-to-implement-dora-metrics-in</guid><dc:creator><![CDATA[Rafal Makara]]></dc:creator><pubDate>Wed, 28 Aug 2024 06:16:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/ae479329-54fa-4948-b715-7076c30f1ce1_1024x1024.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In 2010, way before the State of DevOps and Accelerate were published, we were discussing the frequency of releases, failures, recoveries and the time it takes to get something done - in a company in which, we were using an FTP server for doing multiple deployments a day.</p><p>I think most DORA implementations waste a lot of time and money for quite a low value of having lots of colourful and fully automated dashboards.</p><p>I like metrics. However, fully automated DORA is a low priority on my list. </p><p>I see a few common problems when companies decide to implement DORA. </p><h2>Problem 1: Definitions</h2><p>We like to theorise more than take action. We may spend half a year and still be at a point in which we are still discussing if:</p><ul><li><p>Is a <em>Lead time for changes</em> the time it takes for a commit to land on production? Or is it the time to get the Jira ticket done, after we move it to In Progress?</p></li><li><p>Is a <em>Change failure rate</em> more about rollbacks compared to the total number of deployments? Or about customer-facing incidents? Is it a percentage value or a count?</p></li></ul><p>I recommend timeboxing the discussions around the definitions for 1 day and then writing them down somewhere in a source of truth. It might be some knowledge space or ADR (Architecture Decision Record). From that moment, just stop discussing and changing the definitions and focus on the data. You may publish another ADR in the future if you want to change the definition but let&#8217;s pause the philosophy for now.</p><h2>Problem 2: Automation</h2><p>In my opinion, you can get 90% of the value from DORA metrics without automation.</p><p>To get a fully automated dashboard of DORA it takes the time to: </p><ol><li><p>Choose, buy and adjust some SaaS solution. Then you most often need to adjust something in your ways of working to meet the philosophy of a specific tool.</p></li><li><p>Or, build your dashboard by connecting it with the data from the issue tracker, repository, CI/CD pipelines, observability tools, list of teams and people, and their ownership of codebase areas. </p></li></ol><p>Both of the above solutions may cost from a few thousand dollars to a few hundred thousand dollars a year.</p><p>I recommend Google Spreadsheets for the first increment of DORA.</p><h2>Start with a Spreadsheet</h2><p>Depending if you want to measure it for 1 product, 1 technical component or the whole organization you may setup rows and columns differently. However, the point is to use one dimension for:</p><ul><li><p>Deployment Frequency</p></li><li><p>Lead Time for Changes</p></li><li><p>Change Failure Rate</p></li><li><p>Time to Restore Service</p></li></ul><p>and the other dimensions for products / systems / technical components.</p><p>As a value in the spreadsheet cells, you may use pre-defined drop-downs. For example, in the deployment frequency dimension, you may use &#8220;once a month&#8221;, &#8220;a few times a month&#8221;, &#8220;once a week&#8221;, &#8220;a few times a week&#8221;, &#8220;once a day&#8221;, and &#8220;multiple times a day&#8221;.</p><p>Start by filling this table with your leadership. Then start asking the teams to fill it out. </p><p>In the next increment, you may want to scale this MVP to more dimensions (e.g. teams), that fit your organization. </p><p>Thanks to this simple spreadsheet, from the very first moment, you may start applying the DORA understanding. DORA for me is a perspective, not a dashboard.</p><p>If you are an engineering team that starts to use any kind of metrics, and you start with DORA, and you spend a few months to implement a dashboard, then you may get a pushback from some people saying <em>&#8220;We knew it without a dashboard that you&#8217;re deploying once a week, half of the deployments cause problems and it takes half a day to fix them. Congratz for spending a few months building a dashboard.&#8221;</em>.</p><p>Start with a spreadsheet. After a few months, if you decide to automate it or buy SaaS - it is fine. However, no matter what you implement, it&#8217;s worth applying product management techniques to lower the risks and shorten the time-to-value of DORA. </p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.sorryengineering.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Sorry Engineering by Rafal Makara! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[CEO is a Job]]></title><description><![CDATA[When I worked as a Software Engineer, I thought C-Levels, VPs, Directors and Senior Managers were like gods.]]></description><link>https://www.sorryengineering.com/p/ceo-is-a-job</link><guid isPermaLink="false">https://www.sorryengineering.com/p/ceo-is-a-job</guid><dc:creator><![CDATA[Rafal Makara]]></dc:creator><pubDate>Thu, 01 Aug 2024 09:29:33 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/9f899b04-d567-45a7-84bb-cd35ad0e4aec_1024x1024.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I worked as a Software Engineer, I thought C-Levels, VPs, Directors and Senior Managers were like gods. Whatever they say is smart. </p><p>Then, I learned that a CEO is not always a Co-Founder. They might be hired and fired.</p><p>All kinds of Executives are humans. They brush their teeth. They do housekeeping. They clean the toilet at home. They may wake up not being motivated. They may not be happy about the current shape of the company. They may be wrong. They may not be enjoying what they need to do this week. They may be too tired to listen actively. </p><p>They are humans. However, they have the work to do. They are Employees.</p><p>Of course, it is true, that they have more decision-making power around &#8220;big decisions&#8221; in a company than most Employees do. But still humans. </p><p>Often, there&#8217;s an objection, that Executives try to make the grass greener than it is.</p><p>While the Leaders need to be vulnerable; would you prefer to work with those, who keep being positive and optimistic, who believe in people, who say that you can achieve great things? Or with the ones, who use every meeting to communicate in what shitty circumstances we are and why we cannot do much about it? </p><p>The <a href="https://www.sorryengineering.com/p/the-five-tribal-stages">language that we use</a> sets the direction in which we&#8217;re about to change. Painting grass in front of us with a slightly brighter colour is part of their job. It is the part of communicating the vision and strategy for getting there. On the other hand, keeping people far from reality can cause a mess. The grass cannot be too bright. It is hard to find the balance and not disappoint anyone. </p><p>The sad part of it seems to be that Executives are expected to be strong. Nowadays, it is common to care for the mental health of people. Do Executives have feelings or inner life just like non-Executives? I guess so.</p><p>It is important to have empathy towards Executives. It is also important to understand, that they work for a company just as all Employees do. And surprisingly, in healthy work environments, Employees may expect Executives to do high quality work. </p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.sorryengineering.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Sorry Engineering by Rafal Makara! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[How to write in Jira Dashboards?]]></title><description><![CDATA[Jira Dashboards might be powerful.]]></description><link>https://www.sorryengineering.com/p/how-to-write-in-jira-dashboards</link><guid isPermaLink="false">https://www.sorryengineering.com/p/how-to-write-in-jira-dashboards</guid><dc:creator><![CDATA[Rafal Makara]]></dc:creator><pubDate>Tue, 21 May 2024 06:15:56 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a7d25610-19f1-4a52-a242-598b5941052b_1024x1024.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Jira Dashboards might be powerful. Especially with a few plugins.</p><p>But, there is one super important functionality missing.</p><p>Being able to put some text in the dashboard.</p><p>Imagine, you want to provide a short explanation above a table or chart explaining how to interpret it. There is no <em>Text</em> or <em>Rich Text</em> gadget available.</p><p>Theoretically, there is a free plugin for that. However, the Internet mentions the risk of exposing your Jira instance to more security vulnerabilities by WYSIWYG.</p><p>There is a funny workaround:</p><ol><li><p>Create a new Jira Project. </p></li><li><p>Create a new issue. </p><ol><li><p>In its <em>Description</em> field put what you want to write in the dashboard. You can use RichText here! </p></li></ol></li><li><p>In the dashboard, add a <em>Filter Results</em> gadget. </p></li><li><p>Write JQL finding just this one new issue.</p></li><li><p>Show only the <em>Description</em> field.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!naIP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff923db54-37e5-4eae-a573-a230284de941_668x1320.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!naIP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff923db54-37e5-4eae-a573-a230284de941_668x1320.png 424w, https://substackcdn.com/image/fetch/$s_!naIP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff923db54-37e5-4eae-a573-a230284de941_668x1320.png 848w, https://substackcdn.com/image/fetch/$s_!naIP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff923db54-37e5-4eae-a573-a230284de941_668x1320.png 1272w, https://substackcdn.com/image/fetch/$s_!naIP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff923db54-37e5-4eae-a573-a230284de941_668x1320.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!naIP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff923db54-37e5-4eae-a573-a230284de941_668x1320.png" width="282" height="557.245508982036" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f923db54-37e5-4eae-a573-a230284de941_668x1320.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1320,&quot;width&quot;:668,&quot;resizeWidth&quot;:282,&quot;bytes&quot;:121194,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!naIP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff923db54-37e5-4eae-a573-a230284de941_668x1320.png 424w, https://substackcdn.com/image/fetch/$s_!naIP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff923db54-37e5-4eae-a573-a230284de941_668x1320.png 848w, https://substackcdn.com/image/fetch/$s_!naIP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff923db54-37e5-4eae-a573-a230284de941_668x1320.png 1272w, https://substackcdn.com/image/fetch/$s_!naIP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff923db54-37e5-4eae-a573-a230284de941_668x1320.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It ain't perfect, but definitely good enough.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!huB8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f9dd95-f68d-48df-a7f9-80415a7364c4_2014x2258.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!huB8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f9dd95-f68d-48df-a7f9-80415a7364c4_2014x2258.png 424w, https://substackcdn.com/image/fetch/$s_!huB8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f9dd95-f68d-48df-a7f9-80415a7364c4_2014x2258.png 848w, https://substackcdn.com/image/fetch/$s_!huB8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f9dd95-f68d-48df-a7f9-80415a7364c4_2014x2258.png 1272w, https://substackcdn.com/image/fetch/$s_!huB8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f9dd95-f68d-48df-a7f9-80415a7364c4_2014x2258.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!huB8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f9dd95-f68d-48df-a7f9-80415a7364c4_2014x2258.png" width="1456" height="1632" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b9f9dd95-f68d-48df-a7f9-80415a7364c4_2014x2258.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1632,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:254713,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!huB8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f9dd95-f68d-48df-a7f9-80415a7364c4_2014x2258.png 424w, https://substackcdn.com/image/fetch/$s_!huB8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f9dd95-f68d-48df-a7f9-80415a7364c4_2014x2258.png 848w, https://substackcdn.com/image/fetch/$s_!huB8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f9dd95-f68d-48df-a7f9-80415a7364c4_2014x2258.png 1272w, https://substackcdn.com/image/fetch/$s_!huB8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f9dd95-f68d-48df-a7f9-80415a7364c4_2014x2258.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.sorryengineering.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Sorry Engineering by Rafal Makara! Subscribe to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Dealing with injustice]]></title><description><![CDATA[Everyone knows Radical Candor by Kim Scott.]]></description><link>https://www.sorryengineering.com/p/dealing-with-injustice</link><guid isPermaLink="false">https://www.sorryengineering.com/p/dealing-with-injustice</guid><dc:creator><![CDATA[Rafal Makara]]></dc:creator><pubDate>Tue, 14 May 2024 06:15:36 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/89cbae6f-b871-4bea-be52-697bb41a3e32_1024x1024.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Everyone knows <em><a href="https://www.amazon.com/Radical-Candor-Kick-Ass-Without-Humanity/dp/1250103509">Radical Candor</a></em> by Kim Scott.</p><p>Fewer people know <em><a href="https://www.amazon.com/Just-Work-Done-Fast-Fair/dp/1250203481">Just Work</a>;</em> or its new name - <em><a href="https://www.amazon.com/Just-Work-Done-Fast-Fair/dp/1250203481">Radical Respect</a></em>.</p><p>Besides describing the differences between bias, prejudice and bullying, there&#8217;s a framework that might be used when you&#8217;re an upstander:</p><ul><li><p>When you spot &#8220;<strong>Bias&#8221;</strong>, which means that the person <strong>&#8220;is not meaning It&#8221;</strong>, you respond with the <strong>&#8220;I Statement&#8221;</strong> describing your perspective to interrupt a bias. For example, <em>&#8220;I had a boss in the past, who was a woman and she was great. Based on this, I think women can be great bosses.&#8221;.</em></p></li><li><p>When you spot <strong>&#8220;Prejudice&#8221;</strong>, which means that the person <strong>&#8220;is meaning it&#8221;</strong>, you respond with <strong>&#8220;It Statement&#8221;</strong> referring to general rules, laws, culture or code of conduct. For example, <em>&#8220;It is not fair to judge him upfront based on his nationality. According to our company&#8217;s values, we&#8217;re all equal and we&#8217;re here to work towards the same mission.&#8221;.</em></p></li><li><p>When you spot <strong>&#8220;Bullying&#8221;</strong>, which means that the person <strong>&#8220;is being mean&#8221;</strong>, you respond directly with <strong>&#8220;You Statement&#8221;</strong> referring to the negative consequences of this behaviour. For example, <em>&#8220;You need to stop acting like that towards them as it is illegal and aggressive.&#8221;</em>.</p></li></ul><p>And there is one more, once positional power enters the equation, bullying becomes harassment. </p><h2>Does it really happen?</h2><p>Is it a problem that truly exists? I will skip the statistics as I do not know them. I&#8217;ve been working commercially since 2010, and I can say: yes. </p><p>This is why, I believe it is worth learning these terms. Knowing the names and definitions makes us more aware. Awareness is most often, the first step towards making the world a better place. </p><h2>Self-check</h2><p>Sometimes, it is &#8220;us&#8221;, who did something wrong towards another human being. When realizing that we did something wrong, that&#8217;s worth asking the following questions:</p><ol><li><p>Why am I having this thought?</p></li><li><p>What proof do I have that my judgement about this person is correct?</p></li><li><p>What don&#8217;t I know about this person? What do I assume?</p></li><li><p>Is it possible that I could be biased?</p></li></ol><h2>Ask for help</h2><p>Keep in mind, that the article above is simplified. You may end up taking one of the following roles: person harmed, upstander, person who caused harm, or leader. </p><p>When you do not know what to do, it is always worth to ask for help. It might be your friend or the HR department.</p><p>To dig more into the topic, you can read <em><a href="https://www.radicalcandor.com/blog/kim-scott-just-work/">8 Questions With Kim Scott About Bias, Prejudice, Bullying &amp; Just Work</a></em>. </p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.sorryengineering.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Sorry Engineering by Rafal Makara! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[How to talk about Tech Debt work?]]></title><description><![CDATA[Some people say it is hard to convince product managers to work on tech debt.]]></description><link>https://www.sorryengineering.com/p/how-to-talk-about-tech-debt-work</link><guid isPermaLink="false">https://www.sorryengineering.com/p/how-to-talk-about-tech-debt-work</guid><dc:creator><![CDATA[Rafal Makara]]></dc:creator><pubDate>Wed, 08 May 2024 13:27:40 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c10e8556-f8c6-4415-a0af-d2caeaed9f37_1024x1024.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Some people say it is hard to convince product managers to work on tech debt.</p><p>Some people think PMs are guilty because they make bad decisions of skipping the tech debt work on the roadmaps.</p><p>In my opinion, it is engineering, who most often needs to improve.</p><p>We cannot sell tech debt work by saying <em>&#8220;We want to refactor X&#8221;</em>. Most often, <a href="https://www.sorryengineering.com/p/whats-behind-a-technical-output">it leads to nothing</a>.</p><p>The path to learning how to sell tech debt work lies in product management. At the bare minimum, I would go for:</p><ul><li><p><em><a href="https://vimeo.com/206617354">Output vs Outcome vs Impact by Jeff Patton</a></em> to build a fundamental understanding of outcomes.</p></li><li><p><em><a href="https://www.svpg.com/the-alternative-to-roadmaps/">Outcome Based Roadmaps by Marty Cagan</a></em> to put problems to solve and outcomes work on the roadmap.</p></li><li><p><em><a href="https://www.producttalk.org/2023/12/opportunity-solution-trees/">Opportunity Solution Tree and Continious Interviewing by Teresa Torres</a></em> to visualise and structurize outcomes, opportunities and bets of tech debt work.</p></li><li><p><em><a href="https://www.svpg.com/empowered-product-teams/">Empowered Product Teams by Marty Cagan</a></em> to see that engineering is one of the co-creators of the roadmap.</p></li></ul><p>And then, it doesn&#8217;t matter if we work in roadmaps vs no-roadmaps, backlog vs no-backlog organisations. Doesn&#8217;t matter if we use the techniques mentioned above or not. </p><p>Learning from this &#8220;product management knowledge&#8221; shapes our thinking about defining the work-to-be-done and slicing the work. It teaches us how to speak the same language as product leaders do. This way we get better at explaining the &#8220;why&#8221; behind the tech work.</p><p>After some time the term &#8220;tech debt&#8221; may even disappear from the vocabulary, because this type of work will become equally important as the other types. &#8220;Tech debt&#8221; work will be described in the words that <a href="https://www.sorryengineering.com/p/deliver-to-primary-persona-first">deliver value to personas</a>. </p><p>It is also about the versatility of our skills, knowledge and experience, which can make us more valuable team members, who care about the users. It is also about understanding our colleagues of different specializations. </p><p>There are <a href="https://www.svpg.com/articles/?orderby=date&amp;order=asc#038;order=asc">tons of Marty Cagan&#8217;s articles</a>. </p><p>There is <em><a href="https://www.svpg.com/engineering-wants-to-rewrite/">Engineering Wants to Rewrite! by Marty Cagan</a></em> from 2007, which I do not fully agree with on the solution level but I agree with how it states the problem level. </p><p>From my perspective, it&#8217;s an engineering people&#8217;s job to learn the basics of product management, otherwise, <a href="https://www.sorryengineering.com/p/your-seniority-is-a-lie">our seniority may become a lie (2020)</a>.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.sorryengineering.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Sorry Engineering by Rafal Makara! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><p></p><p></p>]]></content:encoded></item></channel></rss>