
PTC is an international company, a pioneer in creating parametric design software (CAD). One of the company’s flagship products is „PTC/Creo”, a program for 3D design, which I helped to develop. It is comparable to CATIA, SolidWorks, or AutoCAD, and is used by leading manufacturers in the aerospace (NASA, Boeing, Airbus, Hill Helicopters), electronic (Samsung, Apple), automotive (Toyota, Hyundai, Carlin, CUPRA, Volvo), and other industries. Once, I even received a bug report from a jewelry designer 🙂. By the way, the problem turned out to be user error, — he was misusing one of our features.
Incidentally, my car, a „Hyundai i20”, was designed using the software I helped to develop.
I worked in a department responsible for the Family Table functionality. This feature allows users to create multiple variations of a single part based on a „base” design and a list of changes stored in a table. For example, a car can be equipped with several different engines. As a rule, a base design of the car is created, and then the designer adds a table that specifies the differences between models, — such as „which engine blueprint to load”, „how the engine mounts shift relative to the chassis”, „what changes are needed in the transmission”, etc. This table is called the Family Table. Using the base design and the entries in the Family Table, it’s much easier and faster to create an entire family of similar models, — that is, easier, when compared to creating separate 3D drawings for each model from scratch, even if the difference is just a single bolt.
The aforementioned jewelry designer used the Family Table to determine the number of diamonds placed evenly around a ring, as a function of ring’s diameter: the wider the ring, the more diamonds could be attached to its rim.

Image credit: PTC.
Work Experience
- Started in 2012, finished in 2016.
- Position: Software Developer.
My accomplishments
During my work on „PTC/Creo” project
- I participated in the development of support for drawings created in competitors’ programs.
- Developed the Concept Design functionality, which allows users to create from an existing project multiple branches of designs, save particularly successful designs, quickly switch between them, view a list of changes between designs, and ultimately decide which of these prototypes is best suited to become the next iteration of the main project.
- Contributed to the development of the Creo Layout product, enabling the reconstruction of 3D objects based on 2D drawings.
PTC/Creo has been running on a wide variety of platforms throughout its long history. Some of the code I came across was written back in 1986, even before the official C language standard was introduced. This program could be executed on virtually any operating system, from IRIX to MacOS 9 Classic.
At PTC, I learned the proper approach to ensuring software portability: the program’s internal code is completely decoupled from the operating system. Between the program and the operating system lies a HAL (Hardware Abstraction Layer) library, which translates the program’s calls into what the operating system expects. This design means that to make „Creo” work on a new operating system, all that’s required is the creation of a new HAL.

Source: self-made screenshot. Click to open.
It’s understandable that the vast majority of HAL libraries hadn’t been supported for a long time, — after all, who in 2014 would consider running a 3D modeling system on a defunct operating system whose last version was released in 2006? Nevertheless, the offices were full of equipment that seemed legendary to me: Silicon Graphics CRT displays, SUN keyboards with a bunch of additional keys to the left of the alphanumeric block, HP-UX servers, and other similar relics. One legendary SGI CRT display survived a weekend being watered from a pipe that bursted directly above it. On Sunday (the first working day in Israel) the room was full of mist, the display was throwing sparks on right and left, it was hissing like a snake, but it was still working.
The development process for „Creo” was also unusual: code was written on Solaris, tested on HP-UX, and compiled and sold for Windows and macOS X. I was the third developer in the whole company to be assigned a Windows computer for development right away, and one of my first tasks was to create a guide for transitioning the entire development process to Windows.
After solving all the related issues, I prepared a two-hour lecture on the workflow for development, compilation, and testing on Windows, including working with version control systems and other intricacies. The lecture was a sold-out — not because of popularity, but because attendance was mandatory — and it was even recorded as a guide for future generations — though no-one knows where the recording is stored now.
As a result of this project, I was awarded a „Certificate of Excellence” along with a nice monetary bonus. 😊

Source: self-made screenshot. Click to open.
One of the drawbacks of „Creo” was the need for static linking of the entire program. For Linux, Solaris, and similar operating systems, the entire program was compiled into a single massive binary file over a gigabyte in size. Everything that „Creo” contained became part of this executable; the distribution consisted of one file only.
Let me remind you, this was in 2012. I had never seen an executable file of such size before, and I hope files of this magnitude are still rare even today.
When I asked, „Why don’t we just dissect the program and separate its parts into loadable libraries?” I was told that it should be done, but no one ever gets around to it. That’s when I truly understood how management perceives the term refactoring. To be fair, other developers did understand the importance of doing it, and managed to perform partial refactoring while working on other tasks. As a result, the Windows® version of the program could already boast some dynamically loaded libraries.
A significant problem was the program’s performance. Parts in a „PTC/Creo” drawing are interconnected. There can be a lot of them. In a ship design (yes, entire ships are designed in „PTC/Creo”), there can be four billion parts, each with a clearly defined position and a long list of dependencies. For instance, Bolt A connects Parts B and C via brackets B1 and C1, which have holes. Changing the position of Bracket B1 affects Part B, the position of Bracket C1, and Part C. After the position shift, Bracket C1 might end up in a location where it cannot exist because Part D is already there. Changing the diameter of Bolt A affects the diameter of the holes in Brackets B1 and C1, which potentially impacts both the cost, the bill of materials and strength of the parts. All these factors need to be accounted for.
Recomputing an entire drawing due to a change in one (or more) parameters is called regeneration, because all the geometry is essentially re-, well, -generated from scratch. Parallelizing these computations across multiple threads is impossible since one change in one part of a drawing can affect a detail in another part of the drawing via very long and not always obvious list of dependencies. (By the way, having a loop in the list of dependencies was one of our greatest nightmares; such a drawing can’t be repaired or recovered, regardless of its importance). As a result, the entire drawing, no matter how many parts it contains, is recalculated in a single thread, one part at a time.
Can you imagine the time it takes to regenerate a ship design with four billion parts on a computer from the 2010s? That’s where the skills of a programmer capable of writing fast and optimized code were invaluable. My colleagues at „PTC” were absolute beasts, — capable of compiling, debugging, and running everything, and doing so with minimal resources.
During my work on „ThingsWorx” project
Then, for a year, I participated in the development of ThingWorx, which is a platform for rapid development of projects in the fields of the Industrial Internet of Things (IIoT) and Augmented Reality (AR). For example, based on this platform, the company „John Deere” created a tractor that can order a replacement part on its own when something breaks. When the mechanic arrives with the part, the tractor shows him in augmented reality how to replace it quickly and correctly.
I was the only team member working from the Haifa office; the rest of the department was based in the Herzliya office. My unique position meant that, during the year, I was almost entirely engaged in research, comparing various technologies and providing recommendations to management, and rarely participated in development which requires tighter integration with other team members.
- For instance, I compared different database servers and recommended using PostgreSQL for the project.
For this research and development work, I received a performance evaluation of “Exceeded Expectations” during the annual review.

Source: self-made screenshot. Click to open.
After the research phase was completed, we started writing code, using AngularJS. Me, a systems programmer, was expected to write in JavaScript! I didn’t even know what operating system my code would be running on! It was so far away from the kind of work I enjoyed that I quickly decided to pack up and leave.