
Sometimes it seems to me that the more I look at the IT industry, the more primitive the general picture in my head becomes. It’s as if IT is either a serious rocket science, or another service that “allows * to do something else * with just one click.” Outside of this view, the classes are still untouched by new technologies. Go to the same dentist - well, where is IT?
What a delusion it is.
')
Today, the dentist prescribes treatment, and his decision may be the work of several hundred engineers around the world. Programmers, mathematicians, technicians, analysts, ML specialists, managers, factories with 3D printers - all for the sake of sparkling Hollywood smiles.
Why do so many people, what exactly are they busy with, and how do mathematicians and C ++ experts help to make teeth even, we talked with Align Tech - a huge international company that massively manufactures mouth guards for orthodontic treatment.
Align Technology Inc. received on My Circle an average rating of 4.5 from its employees, who rated the company above all for interesting tasks, social package, comfortable conditions and because it helps to make the world better!
- What kind of thing are you doing?-
Andrei Maximov : This is an orthodontic treatment. Speaking quite simply - we are committed to moving our teeth in the correct position.
Any person has defects: an overbite or uneven teeth. To solve the problem, you can put, for example, braces. We had invented a different way to solve this problem - with the help of invisible aligners. This is such a cap, which is made for a specific person. It puts pressure on the necessary teeth, and the teeth move.

We, as a company, provide a solution for the manufacture of cap. At the beginning of treatment, the doctor makes a cast of teeth or scans using an intraoral 3D scanner, sends the data to us, and we turn them into a 3D model.
“What kind of scanner do you have?”Sergey Valiev: Imagine an electric toothbrush. It has a head that spins and cleans teeth. We have a high resolution video camera instead of this head. Based on her testimony, a 3D model is built. The main difficulty is that it must be done accurately and quickly - after all, the patient lies with his mouth open on the chair. Scanning takes about 3-5 minutes.

There are still difficulties with fogging of the camera, with splashes, liquids. And the engineers are engaged in these subtleties.
- How does a video come from a 3D model? Is it photogrammetry?-
AM : We use the confocal method of obtaining 3D-scans, that is, we use a laser and an optical method of obtaining information.

When an imprint or scan comes to us, we process it with special algorithms. The program understands where the teeth, where everything else. Through our ClinCheck program, the doctor can look at the obtained 3D model of the patient's teeth and also virtually move them to the correct position. The program also has built-in measuring and diagnostic tools.
- What algorithms do you understand how it should be after treatment?-
AM: There are orthodontic norms, according to which teeth should be placed. We have a huge base of the correct positions of the teeth, and with its help, we suggest it to the doctors. In essence, we automate their work.
“Just comparing a patient’s teeth with a textbook?”-
AM: People have only 32 teeth, and they should stand so that they do not interfere with each other. Accordingly, with the help of algorithms we expose them in a certain way. The doctor checks, makes adjustments, and if he likes everything, he approves the treatment plan, and we begin the process of making alyner.
- How is this process?Mikhail Matrosov: For our specially trained staff (technicians), we make the Treat program, in which they prepare a-line for printing according to data from doctors. Here the technician receives data from the patient's jaw and the doctor's recommendations on how to treat each case. And the concept of “treat” is unformalized, and cases are very different.

The program itself is a 3D CAD system. It shows the initial state of the patient's teeth. You can then form the desired state after treatment and calculate the intermediate stages - how the patient's teeth will travel from the initial state to the desired one. Finally, in the program, you can specify that the patient should attach inconspicuous bulges (“attachments”) to certain teeth, which will help the alainer to develop the right forces. Without them, for example, it would be almost impossible to stretch some teeth from the gums.

Each of these steps is performed in semi-automatic mode. The technician sets the necessary settings in accordance with the wishes of the doctor, and the program generates a result. For each step has its own team of developers.
After the CAD system goes CAM (computer-aided manufacturing). It calculates the complete model of the patient's jaws at each stage (intermediate and final). These models for each stage are printed on a 3D printer. Then the film is stretched onto the printed forms, along a complex trajectory, a segment of this film is drawn with a laser and an aligner is obtained. And for all stages you need a lot of software that is developed inside the Align. That's why we need so many programmers.
AM: We make 300 thousand unique a-liners per day. None of the competitors has reached such a scale, because for the most part this is a manual process. And you can't reach huge revolutions by hand.
- Where are these three hundred thousand alayers produced?- AM: In factories in Mexico and China. They are made from special plastic, which is also being developed in Alaine. There is a special chemical formula, since biocompatibility testing was conducted. The material is also know-how, it influences the outcome of treatment.

After this, the doctor is sent a ready-made kit, he invites the patient and explains how to use them. Aligners are worn almost all the time, even at night, and are removed only while eating. Every two weeks the mouthpiece is changed to a new one.
Teeth and machine learning
Some dentists do not understand orthodontics as well as rare specialists. Therefore, we help them solve some simple cases. If the teeth need to move slightly, we suggest they use our automatic treatment.
In order for the doctor to understand whether he can treat some cases or not, we recognize the situation with a special program, do some diagnostics and issue a conclusion - whether or not. And for such tasks we need a lot of specialists - in ML, C ++. Since we have automation, we need backend specialists.
First, a case assessment was performed by people, and artificial intelligence was trained. Now almost 100% of such operations are made by the machine. We tried many approaches. The guys tried to make a 3D model from a photo and find some discrepancies. It did not work very well.
A year and a half ago, the first iteration of the ML model was released. As far as I know, the team used Python and TensorFlow. The assessment is done in several categories of what the doctor treats. The patient may have crowded teeth, or vice versa, when they diverge to the side. These are different problems with teeth and for them are different models. They are the most common and we started with them, then moved on to more private cases.
In the next release, we will roll out the model for all possible types of dental problems. For a while, we will keep track of all problem cases and analyze errors. For this, there will be a reserve from the manual assessment team.
The full process of learning models took about two years.
Another machine learning is used to work with photos. We are trying to show a person what his smile will look like after treatment. To do this, take a photograph of the patient, render a 3D model of his teeth, and then the program tries in a way close to reality to embed it in the photograph so that the person can see how his smile will look beautiful.

How Align appeared in Russia
- AM: About 15 years ago. In California, people from Moscow studied, and while they were studying, they found work at the Align office. In those days it was a small company. When they finished their studies, they returned to Moscow, but the contractual relationship with them remained. They were just very good programmers. And to make it easier for them to work, a small office was opened in Moscow. Then it grew to a very large scale. Now there are more than 400 people.

In Novosibirsk, the office opened in the same way as in Moscow. The man, who proved himself very well, was from there and decided to return to his city. He offered to work remotely, but he was assigned to create a small office. There are now about forty people.
SV: What's interesting, a year ago, there were about 200 people in Moscow. For the year we have almost doubled.
- How are your people distributed among all these projects?- AM: We have a team of engineers that deals with the backend. There is a team that deals with the ClinCheck program for doctors. The largest team is engaged in software for technicians, which is used only inside. There are separate QA and DevOps commands. The iTero team makes software for scanners.
- How independent are the teams technically?- AM: Business tasks for teams come from marketing, but technical decisions are made independently here in Moscow. They do not need special permits from headquarters. If we change the architecture between systems, we should at least talk about it and get agreement. But at the functional level, we have complete independence.
Andrey Zaitsev: We have such a process called Architecture review board. Even if we are sufficiently free to choose, we must justify it before leading architects.
For example, we now have the main development language - Java. But the team expressed great interest in Kotlin. One of our developers for six months prepared presentations with justification, taking into account the risks of hiring, risks of data leakage, problems in the language. He gave a presentation on the architecture board, we got an ap, and the team had an additional development language. Now for new micro services we use Kotlin instead of Java. That is, we are free, but everything must be justified. You can not just suddenly go to some Haskell.
- How is communication with other offices built?- AM: There are no difficulties with the interaction. We constantly travel to the R & D office in Raleigh, North Carolina, USA, and headquarters in San Jose.
- AZ: In the backend we have six SCRUM teams. One is located in the Israeli office in Tel Aviv, the other in Raleigh, the rest in Moscow. We synchronize twice a week, tmlids discuss the current process, the next releases, interactions between the teams, new technical solutions, changes in the general modules. And so - standard corporate communication. We have all Microsoft teams, if necessary, you can recruit any colleague and chat with him.
There used to be a problem that the office in San Jose is in the opposite time zone from Moscow, and when they come to work, we are just leaving. Therefore, meetings were usually held late in the evening. It is simpler with an office in Raleigh, with them rallies begin around four in the evening in Moscow.
- AM: Since my team is developing a program for doctors, we must, at the end of the sprints, show demos to the doctors who work in our company. They sit in San Jose, USA, so sometimes you have to start demonstrations not earlier than seven in the evening.
What technologies make teeth even
- Tell me who does what with the help of what?- AM: ClinCheck, which is developing my team exists in two forms. The first is a desktop application. It is made in C ++ and Qt for the user interface. The desktop was written a long time ago. The problem with him is this: doctors are not IT people at all. Although they are great specialists in the field of orthodontics, it is very difficult for them to keep the computer in good condition. And when we release an update, a lot of technical difficulties begin.
The second problem - half of orthodontists use Macs, and our desktop is only under Windows. If the doctor wants to use the program, he has to install a virtual machine. This is inconvenient - they do not cope well with a computer either, and even manage a virtual machine in general.
Therefore, we translate the application to the web so that it works everywhere. True to the functionality it has not yet caught up with the desktop version. As soon as you catch up, we will turn the desktop.
In development we use TypeScript and ReactJS. Typscript was chosen primarily because of the possibility of static type checking. Interestingly, some of the front-end vendors moved from C ++, so there was a desire to continue using static typing.
- But do other services write to you in JavaScript?- AM: Yes, the team that makes the commercial web portal writes it in JS and TypeScript.
- When you decided to take TypeScript, you were not told that since the company is already using JS, would you rather take it?- AM: Naturally, we had to defend the choice, but we explained that TypeScript has several advantages. Here everything was exactly the same as in the case of Kotlin.
- AZ: Andrei’s team is doing the front, what the doctors see. My team makes a backend for this in order to have where to store and process data. We started making our system in 2014. At that time, the company had several large enterprise-level systems, but they developed slowly, were monolithic, with very long release cycles, had to be tested a lot, and not every build was successful.
It was then that the microservice approach became very popular, and we tried to implement it with our team. That is, we develop small applications with a clearly defined goal, a clear area of responsibility.
Our main stack is Java. As a framework, we use Spring and many things that are under his umbrella - security, work with the base, various cloud services to ensure reliability, error handling. We know him well, we like everything and are not going to change it yet. We use it as the core of any of our services.
Now we have about 20-25 services. They are divided between six teams, and in the area of responsibility of each is 3-5 microservices. We don’t spend resources to rewrite Java in Kotlin, but we write all the new services and tests on Kotlin. Now the ratio is somewhere 95/5. So far, only three services are being written on Kotlin, because we began to actively use it only from the end of last year.
- How does the team perceive the transition? Everyone wants?- AZ: In general, perceived positively, the guys are happy to understand. There are, let's say, a few Kotlin champions - those who really wrote a lot, and they help the rest with code review.
I want to develop an understanding of exactly how the API should work on Kotlin, so that it is not just a code rewritten by an automatic machine. And the guys are trying to develop a kind of archetype, which will then be used everywhere.
In general, we try to replicate good solutions. Since we have two dozen services, certain things, like security, working with the database, working with cloud providers, are repeated everywhere, so we have a common code base. There are different modules that rummage between components, which allow an empty microservice without business functionality to be lifted literally in a day. And there is everything you need for work. It really helps to move forward.
At the base level, we usually take Postgress or some noSQL. There is some Python for bdd tests. For different requests to upload data, we write scripts on it.
All services are deployed in the cloud. The main thing is Amazon. We take the application, pack it in the Docker-container, then deploy it within one of the orchestrators. A few years ago we chose Rancher and now use it.
- When you first came, you did not encounter the fact that the project has a large and complex legacy. Still, this is a product that began with the end of the 90s.- AZ: We approached the fight against the big legacy monsters like this: first we wrote a certain proxy, which wraps it in microservices with a REST interface, and only then tried to break it inside and refactor. That is, I did not have to sit for weeks to understand the code base for two hundred thousand lines.
We write many things from scratch, some we rewrite. On new projects we try to maintain the quality of the code. The team is already the fifth year, and it seems to me that we are still doing quite well.
Hiring Mathematicians and C ++ Experts
- Do you need to understand orthodontics?- AM: Not at all. It is unrealistic to find people who have such a background. In the work itself one has to study one way or another. Different teams need different understandings. The ClinCheck team is more because we talk to the doctors, and we need to at least understand their words.
But in interviews we never ask about this - we are looking for people who are primarily knowledgeable in programming.
- What will you look to understand?- AM: At the first stage, we look at the resume, evaluate work experience. Then we will arrange an interview by phone, which lasts 30 minutes. Ask simple questions about the technology, with what and how it worked. And if a person has shown himself well, we invite him to the office.
There we usually give a programming task. It is not academic, do not write any sorting algorithms. We give a practical task, for example, how to implement an application like Twitter. A person takes 20-30 minutes to write a code, and then we ask questions about this code.
In the formulation of the problem laid several pitfalls that a person should try to get around. If he is experienced, he immediately sees these problems and either solves them in the code, or tells us about it. If he does not notice, we point out to him and also look at how he will decide.
In general, the interview lasts about two hours. And all the hiring from and to takes about two weeks.
MM: For hiring internal services, we first look at C ++ and at mathematics. Depending on the command, there is an offset either to one side or to the other. The team that builds a model of distribution of forces on an alainer - there, of course, is primarily a mathematician.
The team of the 3D platform in which I work does not deal with product issues (there are a lot of them), but supports the system engine, makes C ++ libraries. There first of all With ++ and knowledge of algorithms.
- Probably difficult to find people in such a team?Yes and no. Difficult, because you need a good knowledge of the advantages, understanding how the software and hardware work. But a little easier, because we at least do not need math. If a person barely remembers the linal, this is more than enough - just to avoid falling into a stupor if he sees that the vector is multiplied by the matrix.
We have a similar hiring process: the selection of resumes, phoned for half an hour. By phone we ask about the data structures and how they differ from each other. The simplest algorithms, about the complexity of sorting, how the memory is managed, what a virtual function is. In general, the basic things.
- When you are looking for a person with knowledge of C ++ and mathematics, will his software skills be very important?Usually, if a person has good C ++ and math, then his lack of software skills will most likely be not in the fact that he is conflicted and quarrels with the team, but in secrecy. For example, a powerful introvert who likes to go deep into tasks and doesn’t really like talking to people.
With such rarely there are conflicts. The problem that can happen is that you want him to tell you how it works, and he will say just a couple of words, in full confidence that the rest is obvious. But if you continue to ask, in the end, you can get everything you need. And even if he is not good at explaining something, he can definitely write down, attach comments and explanations in the document.
- Have you tried using aliners yourself?Enjoyed. Our company fully compensates for the production of alayers. But, unfortunately, you have to pay for the work of the doctor. In Russia, this is half the cost. In America, the work of a doctor is a big part. 5-6 thousand dollars all treatment.
- It happens that developers do not want to go to you, simply because “this is some kind of dentistry, and not IT”?SW: This is the most frequent question in an interview - “where is IT at all?” And when you explain that we are not a dental company, but simply make a real product - not some abstract task trackers - which are used by real doctors, then people are immediately involved.