<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Yan Reysak</title>
    <description>The latest articles on DEV Community by Yan Reysak (@yan_reysak_6e339d8e8f988d).</description>
    <link>https://dev.to/yan_reysak_6e339d8e8f988d</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4008535%2F174f58b2-39fd-4549-8e54-09852a73c436.jpg</url>
      <title>DEV Community: Yan Reysak</title>
      <link>https://dev.to/yan_reysak_6e339d8e8f988d</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yan_reysak_6e339d8e8f988d"/>
    <language>en</language>
    <item>
      <title>They Gave Me a Broken Manual. I Gave Them a Working System.</title>
      <dc:creator>Yan Reysak</dc:creator>
      <pubDate>Mon, 29 Jun 2026 16:43:00 +0000</pubDate>
      <link>https://dev.to/yan_reysak_6e339d8e8f988d/they-gave-me-a-broken-manual-i-gave-them-a-working-system-3iko</link>
      <guid>https://dev.to/yan_reysak_6e339d8e8f988d/they-gave-me-a-broken-manual-i-gave-them-a-working-system-3iko</guid>
      <description>&lt;p&gt;In April, I received a 60-page manual and a technical specification. The task was to turn them into diagnostic software for gas turbine units. The deadline was one month. There was a promise of a contract.&lt;/p&gt;

&lt;p&gt;I created the software on May 30.&lt;/p&gt;

&lt;p&gt;111 unit-tests. 130+ calculated parameters. Three operating systems: Windows, Arch Linux, Alt Linux.&lt;/p&gt;

&lt;p&gt;But the manual contained roughly ~57 errors. At least, the ones I managed to find. Not just typos. Systemic errors. Arithmetic, mathematical, physical, chemical, metrological and logical errors.&lt;/p&gt;

&lt;p&gt;I documented every finding in my developer's journal. Because I was searching for the truth.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Software
&lt;/h2&gt;

&lt;p&gt;The program performs parametric diagnostics for gas turbine units. It takes about 20 input parameters from sensors - pressures, temperatures, flow rates. In about two seconds, it calculates over 130 derived parameters, generates three diagnostic charts, and outputs a conclusion: the equipment is safe, requires maintenance, or is critical.&lt;/p&gt;

&lt;p&gt;Before this, engineers did these calculations manually in Excel. It took hours. And mistakes were common.&lt;/p&gt;

&lt;p&gt;The software runs on Windows, Arch Linux, and Alt Linux. I developed it on Arch and packaged it with PyInstaller for each platform.&lt;/p&gt;

&lt;p&gt;Tech stack: Python (3.13.5), customtkinter for the interface, matplotlib for charts, pandas and openpyxl for Excel export, fpdf for PDF reports. The core calculation engine is pure Python - for now.&lt;/p&gt;

&lt;p&gt;What it produces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full diagnostic report (Excel)&lt;/li&gt;
&lt;li&gt;Technical passport (PDF)&lt;/li&gt;
&lt;li&gt;Three diagnostic charts (PNG)&lt;/li&gt;
&lt;li&gt;Equipment health classification (KTS - technical condition coefficient)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The program doesn't just calculate. It validates every input. It catches unit mismatches. It flags physical impossibilities. I built 111 unit tests to verify every formula - because when you're diagnosing industrial equipment, a wrong number is not an option.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Plan
&lt;/h2&gt;

&lt;p&gt;I started with a 15-day plan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Days 1–5: Core math engine, validators, unit tests.&lt;/li&gt;
&lt;li&gt;Days 6–10: User interface (customtkinter), input forms, result display.&lt;/li&gt;
&lt;li&gt;Days 11–15: Reports (Excel, PDF), charts, packaging for three platforms.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The plan helped me stay focused. When the manual started revealing errors, the plan kept me grounded. I knew what was done and what remained.&lt;/p&gt;

&lt;p&gt;It took 40 days instead of 15 - but the structure held.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hunt for Errors
&lt;/h2&gt;

&lt;p&gt;When the first calculation result didn't match the manual's reference values, I assumed I had a mistake. That's the normal reaction. I checked my code. I checked the formulas. I checked the constants.&lt;/p&gt;

&lt;p&gt;Everything was correct.&lt;/p&gt;

&lt;p&gt;So I started checking the manual itself.&lt;/p&gt;

&lt;h3&gt;
  
  
  Error Type 1: Chemistry That Doesn't Exist
&lt;/h3&gt;

&lt;p&gt;In Appendix D, there is a table with chemical formulas for gas components. For normal butane, the formula was written as  C₄H₁₂.&lt;/p&gt;

&lt;p&gt;That compound doesn't exist.&lt;/p&gt;

&lt;p&gt;Carbon has a valence of 4. Hydrogen has a valence of 1. Butane is C₄H₁₀ - four carbon atoms, ten hydrogen atoms. The authors confused it with pentane, which is C₅H₁₂ and appears one line below.&lt;/p&gt;

&lt;p&gt;This is high school chemistry. If they get this wrong, what else did they get wrong?&lt;/p&gt;

&lt;h3&gt;
  
  
  Error Type 2: Physics That Defies Logic
&lt;/h3&gt;

&lt;p&gt;One of the charts in the manual describes the behaviour of a turbine with 30 blades. The polynomial formula for this case had a plus sign before the first term.&lt;/p&gt;

&lt;p&gt;When I plotted it, the curve showed that a turbine with 30 blades produced more power than a turbine with 36 blades.&lt;/p&gt;

&lt;p&gt;That is physically impossible.&lt;/p&gt;

&lt;p&gt;Fewer blades means less gas impact on the rotor, less torque, less power. I consulted thermodynamics textbooks. I checked the physical model. I concluded that the plus sign was a mistake - it should have been a minus.&lt;/p&gt;

&lt;p&gt;I changed it. The chart now matches physics. Because I trust physics more than I trust a manual.&lt;/p&gt;

&lt;h3&gt;
  
  
  Error Type 3:  A 70% Discrepancy
&lt;/h3&gt;

&lt;p&gt;One formula calculates a constant component for gas flow. The manual provides a reference value: 0.00331.&lt;/p&gt;

&lt;p&gt;When I calculated it using the manual's own input data and the manual's own formula, I got 0.000991.&lt;/p&gt;

&lt;p&gt;That's a 70% discrepancy.&lt;/p&gt;

&lt;p&gt;I rechecked every input. I rechecked every unit conversion. The result was consistent. The manual's reference value is simply wrong.&lt;/p&gt;

&lt;p&gt;As it turned out, this parameter wasn't just calculated incorrectly - it wasn't being used in the current calculations at all. It had been overlooked.&lt;/p&gt;

&lt;p&gt;I was subsequently asked to remove this parameter entirely.&lt;/p&gt;

&lt;h3&gt;
  
  
  Error Type 4: Violating Their Own Rules
&lt;/h3&gt;

&lt;p&gt;The manual clearly states: "For gas with methane content between 95-100%, use coefficients from "Standard"."&lt;/p&gt;

&lt;p&gt;The gas contains ~98% methane. So the Standard coefficients must be used.&lt;/p&gt;

&lt;p&gt;But in the control example, the authors used coefficients for "Gas No. 1" - a different set, intended for a different methane range.&lt;/p&gt;

&lt;p&gt;This affects 47 parameters. Including the surge margin. Surge is a dangerous mode where gas flows backward through the turbine, causing vibrations and potential destruction. A 4% error in surge margin is like navigating a ship through a reef with a map that's 4% inaccurate. You might survive. Or might not.&lt;/p&gt;

&lt;p&gt;I added a choice to the software: "Automatic" - follows the manual's own rules, or "Manual" - matches the control example. Because I can't rewrite physics. I can only show the truth.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tests, Method, and the Search for Truth
&lt;/h2&gt;

&lt;h3&gt;
  
  
  111 Unit Tests
&lt;/h3&gt;

&lt;p&gt;Every formula in the core calculation engine is covered by a unit test.&lt;/p&gt;

&lt;p&gt;Not because I wanted to be thorough. Because I needed to know the code was correct. When the manual gives you a 70% discrepancy, you can't trust anything. Every formula becomes suspect. Every constant becomes a potential source of error.&lt;/p&gt;

&lt;p&gt;I wrote 111 tests. Each one takes a known input, runs the calculation, and compares the result to an independent reference. If the test passes, the formula is verified. If it fails, I investigate.&lt;/p&gt;

&lt;p&gt;The test suite runs every time I change the code. It catches regressions. It catches mistakes. It catches the errors I didn't know I was making.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Verification Protocol
&lt;/h3&gt;

&lt;p&gt;The project also includes a formal verification document. It lists every calculated parameter, the reference value from the manual, and the program's result. For each parameter, it shows the absolute and relative error.&lt;/p&gt;

&lt;p&gt;This document proves that the software is correct - or, more precisely, that it is correct relative to the manual.&lt;/p&gt;

&lt;p&gt;But as I found, the manual itself was wrong. So the verification document serves another purpose: it identifies exactly where the manual deviates from physical reality.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Method: Descartes Without the Philosophy
&lt;/h3&gt;

&lt;p&gt;Rene Descartes wrote: "For the search of truth, method is necessary".&lt;/p&gt;

&lt;p&gt;He also wrote: "I think, therefore I am". But the more practical translation for engineering is: "I doubt, therefore I investigate".&lt;/p&gt;

&lt;p&gt;I doubted the manual. I doubted the reference values. I doubted my own code. Every time I doubted something, I documented it. Every hypothesis was tested. Every conclusion was verified.&lt;/p&gt;

&lt;p&gt;When you're working with industrial equipment, you don't have the luxury of assumptions. You need proof.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;Trust the physics, not the paper. Test everything. Document your reasoning.&lt;/p&gt;

&lt;p&gt;When you're working alone, your only asset is your method. Without a plan, you drift. Without tests, you guess. Without documentation, you forget.&lt;/p&gt;

&lt;p&gt;I built 111 tests - because I wanted to sleep soundly at night.&lt;/p&gt;

&lt;p&gt;I also learned that a contract matters - not because of the money, but because of the clarity it provides.&lt;/p&gt;

&lt;h2&gt;
  
  
  About Me
&lt;/h2&gt;

&lt;p&gt;I'm an engineer in the field of steam and gas turbine units. That's my background. That's how I know what a surge margin is, why fewer blades mean less power, and why a chemical formula like C₄H₁₂ is impossible.&lt;/p&gt;

&lt;p&gt;I've been programming in Python for about a year. This project was my first commercial product.&lt;/p&gt;

&lt;p&gt;During the development, I also learned C and C++. Not because the project required it, but because I wanted to understand how languages work beneath the surface. And because I knew that if the project ever needed more speed, I could rewrite the core in C++.&lt;/p&gt;

&lt;p&gt;I learned both during my university exam session. I passed all exams with top marks.&lt;/p&gt;

&lt;p&gt;I am still learning C and C++. Because I want to understand how programming languages work at a deep level.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I'm looking for
&lt;/h3&gt;

&lt;p&gt;I want to work on challenging projects. I want to create - not just follow instructions. I'm open to contracts, team work, or freelance work. &lt;/p&gt;

&lt;p&gt;I value freedom and responsibility equally.&lt;/p&gt;

&lt;p&gt;If you need someone who can handle both the physics and the code - who can find the errors in the manual and fix them in the software - let's talk.&lt;/p&gt;

&lt;p&gt;Open for contracts, freelance, or full-time opportunities.&lt;/p&gt;

&lt;p&gt;You can reach me at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="mailto:yan.reysak@gmail.com"&gt;yan.reysak@gmail.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
  </channel>
</rss>
