What we are looking for developers to develop the 1C: Enterprise platform

    Our dream is to make the world's best business application development toolkit. We have a lot of great ideas, the realization of which allows us to fulfill this dream, to develop our tools in order to remain the best. Well, in order to implement these ideas at the proper level, we need cool programmers.

    Briefly looking for those who:

    • loves (or is ready to love) to do replicable frameworks
    • wants to make a product that millions of people use

    To show in more detail what kind of developers we are looking for and how, we have taken short interviews with our hiring managers. Questions during the interview were asked such:

    • What kind of developers do you need?
    • What do you ask for an interview?
    • What questions do you prefer for the interview - theoretical or practical?
    • Should a programmer write tests?
    • Do you ask questions not from the professional field of activity?
    • Do you set logical tasks for intelligence that are not directly related to programming? Type of problem about the ball with helium in the car :

    In what areas can programmers work with us in developing the platform? Well, for example:


    Internet development group


    The group writes online services that are probably used by millions of end users of 1C products. Services, for example, allow you to get information about the counterparty, to verify the counterparty’s reliability, etc. The area of ​​activity is very responsible, services work under heavy load, downtime in the work of services is extremely undesirable, so we try to create the most reliable product. And we also make a product called the Interaction System . This is a mechanism that transfers information between client applications and 1C: Enterprise servers; with its help, in particular, a messenger integrated into 1C applications is implemented.

    From the developer I want him to develop the product as a whole - he analyzed the needs of users, thought through the architecture, wrote the code. Because people often come to interviews and say - I’m not interested in analyzing the subject area, I want the analyst to write me a statement of work on which I will program the functionality. That is, a person is interested only in technical aspects of programming. We try not to hire such people, because we have a small team, we have to deal with a large number of adjacent areas. Therefore, the main requirements that are not related to professional skills - is the ability to beautifully and accurately arrange the requirements for the product, think through the implementation, develop the product and be responsible for the final result. What is important is the personal interest of the person in the quality of the final product, so that the person makes the product,

    In Eric Evans 's book "Subject-Oriented Design"One of the main ideas is that the developer must also be an analyst, understand well the subject area that he automates, understand what is valuable for the business, and if he does not understand this, he will not be able to develop a good system that will satisfy all user requirements . If the developer abstracts away from the subject area, then he will not make key decisions on the product architecture, but he will have to implement these decisions, and in this case there is a risk of poor-quality implementation. The same Evans recommends to allocate in the domain area two parts - the part that is fundamentally important for the business, the one that makes your product your own product, and the second part, which is not very important, is responsible for the infrastructure binding. And the best developers should be given the implementation of the first, important part.

    How is the interview? We have a questionnaire, about 10 questions that we ask applicants. The questions in the questionnaire are not theoretical, but practical, for example - the code caused an exception with such and such a stack-trace, explain what you will do. Or - you have a query to the database, which is running slowly (the query text is given), there is a query plan, evaluate - what is bad in the query plan, you need to explain how to speed up the query. It makes no sense to ask a person what types of JOINs are - of course, he knows these types if he prepared a little for the interview. The practical experience of using these JOINs is interesting. If a person has experience in analyzing query plans, it is not difficult for him to tell about ways to solve the problem, if there is no such experience, the book will not help here. Just here the line that distinguishes the developer, which simply read about functionality, from the developer who really used this functionality. We are more interested in dealing with the second type of developer, we want the person to “get involved in the game” right away.

    Some of the questionnaire questions have already stopped working, and we have replaced these questions with new ones. For example, some time ago, at interviews they often asked to implement the Singleton pattern, and when the candidate did this, they said - and now make it lazy. Since then, several articles appeared on Habré where it was described in detail how to write such things, people just learned this task by heart, and it ceased to be a test of professional suitability.

    We also want developers to write tests correctly; for example, the test signature describes a contract to which the system must satisfy. This can be done, for example, in Java in the style recommended by Roy Osher , when the name of the contract method is divided into three parts - “given”, “what we expect”, “what result”. And you can do onGroovy using Spock . It is important whether the candidate understands what needs to be tested, whether it is necessary to test the boundary values, whether he knows about the testing pyramid , etc.

    We also ask about the projects in which the person was involved, especially if they used the technologies that are relevant to us. For example, we use Hazelcast , while very few people use it in production (of the recent major implementations, Yandex.Money ), and we are very interested in people with experience using the Hazelcast. Moreover, the candidate can reveal to us the unexpected and useful sides of the new technology, about which we do not yet know.

    An important topic for us is how to write code for working in a multi-threaded environment. For example, there are several application nodes in a high-loaded environment, and we ask the candidate to tell how to make the system workable and reliable, while at the same time blocking it.

    Should a programmer write tests? Must, but not all. Unit tests programmer must write unconditionally. By the way, we in the team do not insist on the mandatory use of any techniques, for example, TDD ; some developers use TDD on their own, they like it so much. We also write integration tests. Developers also do load testing, write test plans for JMeter.

    Web Client Development Team


    Although we are developing a web client in JavaScript, we prefer that the candidate, in addition to the experience of web development in JavaScript, have experience developing in “classic” OOP languages ​​— C ++ or Java or C #. This is due to the specifics of the project; 1C web client, written in JavaScript, but more ideologically resembles an application written in OOP language. We cover JavaScript code with JSDoc annotations , thanks to which static type checking occurs during assembly. This approach was chosen because we use the Google Closure Compiler , which helps us, in particular, to increase the speed of our code and reduce the amount of memory it consumes. Thus, OOP experience will be of great help to the candidate.

    At the interview, we ask what tasks the candidate and his team had to solve at previous places of work, discuss the architecture of the solutions implemented by him. We assign tasks to the candidate, some of them are for ingenuity and algorithmic thinking. For example, there are tasks that are solved “in the forehead” with a rather large amount of code, and if you think about it, then in one line.

    There is a pool of tasks for specific knowledge of layout, for JavaScript. For example, we draw on a piece of paper the structure of an HTML page (the structure can be dynamic, vary in time according to a certain algorithm) and ask to write code that creates such a structure and implements it in dynamics.

    We also try to assess the predisposition of a candidate for analytical activities; We would not like to have a “clean” coder in the team, even if it is writing high-quality code, but working strictly according to a fixed TZ. I want the developer to be involved in the tasks, deeply understand what is being done in the product and, ideally, also being the driver of the new functionality.

    If the candidate is a student or yesterday's student, we can ask purely theoretical questions, for example, ask the basic principles of the PLO or something else. If a person with experience, such questions may be meaningless, the candidate probably knows these principles and uses them in his work, please formulate them can put him in a dead end, because he trivially forgot the wording from the textbook.

    Each interview turns out to be unique. It is interesting to talk with one person on some topics, with another - on others. At the end of the interview, we tell about our product, about the extent of its use (and they are impressive - our system has millions of end users), we look at how interested a person is.

    Application Scalability Group


    Who are we

    Our team is experts in the field of building high-load systems on the 1C: Enterprise platform. These engineers solve the problem of ensuring reliability and scalability. Such tasks are often at the junction of administration and development issues. The result of solving such problems is a really cool system. Examples of such tasks:

    • Deploy resilient infrastructure in two data centers and model failures,
    • ensure that the system performance does not deteriorate with a 10-fold increase in the number of users, speed up the calculation of the cost by 3 times,
    • investigate and eliminate deadlocks that occur,
    • to ensure the coordinated restoration of more than a dozen distributed information databases at a point in time, taking into account exchanges between these bases.

    And this is not a complete list of tasks. It is especially pleasant that many of the tasks come to us with the wording: “Is it possible to do this at all?” Ie people do not believe at first. We do not argue and always try to convince to try to test in practice, to do. To this we must add the readiness to connect in the middle of the night to the system of a large client, because local engineers have something broken, and no one knows what to do. More than once, it was necessary to restore the destroyed base in the absence of backups or find out why the load on the system increased by 5%. If you wish, you can even read reviews about our work.

    Who are we looking for

    We are looking for engineers who passionately want to do the impossible. One of the most important requirements for a candidate is his burning eyes, the desire and ability to quickly understand what he had never encountered before, using the existing knowledge. These are reliability engineers and developers in one person. Imagine that a client addresses you with several thousand users and tells you what the complex mechanism that its engineers have been developing for a year is trying to put into operation. And by the way:

    • have not yet had time to complete the development in the conditions of constantly changing requirements from the client's business;
    • while the development of key mechanisms for implementation is in full swing, engineers have not yet reached the testing mechanism with thousands of users;
    • even now, no one has a clue why with an increase in the number of users on this implementation, exactly in this mechanism, productivity drops sharply;
    • development was carried out in Windows and with MS SQL Server DBMS, and at the final stage a political decision was made to implement PostgreSQL with CentOS and with PostgreSQL in order to be in the center of the import substitution;
    • and you also accidentally find out that there are timeouts when even 10 users are working;
    • you need to calculate the equipment for this mechanism, because the client had to purchase it last month;
    • You understand that you need to work out a parallel implementation of the algorithms in this mechanism, coordinate them with your colleagues and decide together how you will manage in time without bringing in new errors.

    Yes, and also: not everyone is ready to help identify errors and anti-patterns in their decisions, so you need to be able to communicate very diplomatically with the engineers who have been working under continuous stress in recent months.

    How are we looking

    Interviewing can be a stress for the candidate. But this stress can not even be compared with the stress that you get in a real situation, if you do not think and use all your existing experience.

    The problem of many candidates is that they do not know how to apply their knowledge and cannot explain them to a six-year-old child. That is why, at the interview, we periodically ask us to teach us something that the candidate knows best about. Naturally, I really want to recruit people from whom you can learn a lot. In such discussions, the depth of knowledge and a very good understanding are very important. There was an experience when a candidate was interviewed at 7 am, they came to a discussion of the memory management components in MS SQL Server and finally settled on understanding pages and extents. Then HR intervened, saying: “What are we torturing him with ?! Who knows this at all !? “and we left the room to talk. A sleepy and yawning colleague walked casually along the corridor towards coffee. A colleague was asked the same questions, he answered clearly, correctly, in essence,

    Naturally, we try to check the knowledge of mathematics, algorithms. Rather, they are related to basic knowledge. But knowledge of distributed algorithms and the ability to apply such an algorithm in a task will be a sure plus for a candidate.

    Another way is to ask the candidate to present himself on the site of the 1C developer and to ask him to accomplish some applied task. In terms of the interview and stress of the candidate, such a task allows you to see how the candidate thinks. We look at the candidate’s decision, we help the candidate to see a significant technological problem in his decision, then we look at how the candidate will change the decision, not allowing another technological problem. Sometimes we do this 6-7 iterations, looking for and assess the weaknesses of the solution. At the same time, there is an opportunity not only to discuss and understand what a person knows, for example, about deadlocks, but whether he understands how to reduce the probability of their occurrence to zero in his code.

    Knowledge of a specific programming language is not a super important factor. More important is when a person thinks in terms of programming using a language, and is not limited to language constructs.

    What is used in the work

    The first and most frequently used tool is the 1C: Enterprise technology platform. Knowledge of the platform is required at the level of the administrator and developer. Those. you need to understand how to implement a specific solution and run it in the system for thousands of users.

    It is often necessary to analyze the work of the MS SQL Server and PostgreSQL DBMS, therefore the use of profiling tools, dynamic views, journals are included in the baggage of active skills. And here it is important the ability to work with large volumes. The standard Windows notebook is not very convenient when working with 1 TB of text logs with computer-generated queries and their plans. Immediately there is a need for knowledge of regular expressions, as well as a whole set of tools and languages ​​that support them. To analyze query plans, you need to understand what indexes are, and how does a merge join differ from a hash join.

    Systems in the corporate market often work in Linux OS. There are no graphical environments on the servers. The skills of working in the console are quite important.

    Imagine that you need to find out why the CPU load on PostgreSQL servers on CentOS Postgre processes increased by 5%. Try to write on paper the algorithm of your investigation. And immediately there is an understanding that you need

    • be able to apply not only uptime , vmstat , sar , atop , perf ,
    • know how to use pgbadger , psql and set up log collection in postgresql.conf,
    • be able to find one desired query,
    • use analyze, analyze his plan,
    • rewrite the query and verify that the load has gone down.

    What is important to us

    It is very important that a person think big and try to always see the big picture. For example, the majority of candidates, solving the problem of sorting a text file, offer an algorithm suitable for sorting a file of 10 MB. But how significantly their understanding and point of view change when they are faced with sorting a file of 10 TB in conditions of limited memory and disk space. And it must be remembered that the cost of accessing the disk is higher than the cost of accessing the memory. I really want the candidate to think “to scale” in all tasks.

    1C: Enterprise Platform Development Group


    The main thing that our team requires from candidates is the ability to think analytically, carefully analyze the problem and the ability to weigh the solutions. The 1C: Enterprise platform has a rather long development cycle (months), therefore it is impossible, as in web development, to implement the functionality in parts, step by step. This requires the ability to think deeply when thinking about the details of implementation, you need to try to do "all at once." Those. not to use the first available method for solving the problem, about which I read yesterday at Habré, but carefully weigh the pros and cons of various solutions.

    To understand at the interview whether the candidate has such qualities is not so simple. The most relevant way is to talk about the candidate’s previous experience. When a person says what a cool solution he came up with, ask - and what problem was actually solved? Why was this solution chosen, and not another? And if the conditions of the problem changed a little, how would the solution change? By asking a few similar questions, you can understand how deeply a person is immersed in the topic.

    There is another aspect, illustrated by the phrase: "We hire those who know how to work, and then for some reason want them to want to work." Therefore, at the interview you want to understand what a person is a job. If for him it is a pleasant pastime that allows you to earn money, then with a high degree of probability, nothing good will happen to us and the candidate. For most professional developers, their work is the most interesting thing they ever had to do, research, the desire and ability to create something new. A person, coming to us, should be ready to learn, learn and learn. We do not need just performers, we need people who never get tired of learning, we have to learn a lot and constantly from our work.

    What else do you want to see from the candidate - engineering skills, that is, figuratively speaking, the ability to assemble an elegant solution from cubes?

    The required knowledge of programming languages ​​depends on the area of ​​development of the platform for which the candidate is sought. The core of the platform is C ++ and Java, the web client is JavaScript and it is desirable to know the basics of C ++, some projects require knowledge of 1C, but knowledge of other languages ​​and technologies is also highly desirable. We have to create many new things for the world of 1C, I want the developers ’horizon and erudition to allow them to operate with ideas and concepts invented in other languages ​​and technologies, and to understand how to apply them well and correctly in the right places when developing solutions on 1C. For example, to develop our 1cFresh cloud product .we write various tools, mainly for administration, on 1C (they are faster to develop in 1C than in traditional languages). If a developer understands the patterns of technologies and languages ​​used by system administrators (bash, Python, Perl), this will help him create an easy-to-use tool.

    If we are interviewing a student, we can ask him to calculate his integral and explain why the integral is so considered. The average senior student already understands the meaning of the integral, but a conscientious, enthusiastic student remembers the meaning very well and can explain.

    If we are a system administrator, we can ask, for example, about the peculiarities of RAM manipulation in Linux. If a person works with a DBMS, we ask, for example, what levels of transaction isolation are, which candidate prefers to use, and why. If, for example, a person worked on synchronizing several databases, we will discuss with him how to be if one of the synchronized databases was suddenly restored from a backup. A typical architectural problem that can be solved in different ways.

    Even in the candidate I would like to see a desire to change the world for the better and a healthy share of perfectionism. Without a reasonable amount of perfectionism, it is difficult to write code that will work for years on very different implementations.

    Should a programmer write tests? The programmer must issue a product that works. If this is an adult programmer, no one should care how he does it. If this is a novice programmer, he is recommended to write tests. Over time, a serious developer begins to understand which tests should be written for the code he creates, where there are weak areas of code that are better covered by tests. We are against mindless global test coverage. The program works correctly, not because it is completely covered with tests, but because the developer turned on his head. Tests are an auxiliary tool in order to protect against errors in the most difficult places of the program. And we must remember that tests are not a panacea for architectural problems. The most important thing is that a person should include a head.

    Of non-IT questions, sometimes we ask this question - and who does a person see himself in 3-5 years from now? We believe that we will work together with a person if his development aspirations coincide with the way the company sees his development.

    It is crucial to evaluate two things. The first is where a person is now, what experience and knowledge he has now, what level of a task he can solve right now. The second is that a person in a favorable environment is ready to become in a few years. And so that, of course, these few years he worked in our company, solved problems, grew professionally. We are even more interested in what a person is now, and what he will be in a year or two or three. Our perspective is always more important than the current state of affairs. For us, a promising newcomer is more interesting than a person with great achievements, but faded eyes.

    Development of the 1C: Enterprise platform - another look

    Usually we start the interview with questions - what was your most interesting project, your favorite project? I'd like to immediately understand that a person is forced to ignite at work, and whether he lights up at work at all.

    Further, I wonder if the person had to optimize the performance of programs, as he did.

    We ask what test methods the candidate used on his projects, how he builds up the project's testing strategy, we can ask - do we have a system with this declared functionality, how will we test it?

    If the interview is for a Java developer, ask about the work of the garbage collector; A person who develops more or less complex programs should be aware of the nuances of his work, and how to write code that the garbage collector effectively cleans up.

    From non-programmer topics it is interesting to ask about the business - which task from the business point of view was solved by the candidate’s favorite project, which benefits it brought. Seeing the big picture is a very valuable property for the developer. Once there was a candidate who made the blockchain, his story was very informative.

    We set the design tasks, ask the candidate to design a simple system. Then we look at the project together, look for shortcomings, discuss how to eliminate them. It is very important how the candidate responds to the comments.

    Be sure to talk about what we do, namely, we make the 1C: Enterprise platform. We talk about the fact that we can work on high-tech things, for example, on a cluster of servers or on a mobile platform .

    We do not force candidates to write code on paper. But we draw on paper during the interview a lot, draw a system architecture, module diagrams, a picture of their interaction.

    Knowledge of specific languages ​​is not critical. It happens that a person comes to a company as a C ++ developer, being a C # developer, and learns C ++ quite quickly. And around are many examples of colleagues who have learned new languages ​​in the course of their work. If there is a desire and knowledge of one of the languages, then learning a new language is not a problem.

    We also ask what a person reads, if only Habr and stackoverflow, or also specialty books, and which ones. Sometimes we find useful books for ourselves in this way.

    Reporting Mechanisms Development Team


    We need hardcore C ++ developers. Our team deals with reporting mechanisms, which means that our code works a lot with large amounts of data, and we need a good knowledge of containers and algorithms.

    At the interview we ask - what libraries the candidate used in the work, what algorithms. We use STL a lot , so we actively ask about this library, which containers from it the developer used, for which tasks. For example, please write code that places a specific class in a map, and a couple of similar tasks. For such tasks, it is immediately clear what level the programmer is in front of us.

    We rarely ask questions on the theory of programming. We believe that practical knowledge is more important. If a person solves a problem well, successfully applies the theory in practice, it is no longer so important that he does not remember the exact formulation of the basic principles of the PLO.

    By the way, if a student has come to an interview for whom, due to his lack of experience, it is still difficult to cope with the proposed tasks, we are doing a discount. Here it already makes sense to drive him around the theory, ask around about his professional interests. If a person looks promising as a specialist, it makes sense to give him the opportunity to develop into a good professional.

    Quite an important criterion for us - the willingness to understand someone else's code. The 1C: Enterprise platform is a big product, more than 10 million lines of code, a collision with this code in everyday work is inevitable, at least at the level of embedding your own code in it.

    We ask how the candidate prefers to be given tasks - in the form of a detailed specification, or the statement “make such a mechanism” is sufficient. We understand and accept both approaches, we will not deny a good programmer just because he needs to chew the formulation of the problem; it's just important for us to immediately understand how to work with a person. But I want to continue to develop the employee in the direction of greater independence, was able to take responsibility for a separate direction. As examples of directions I can givedynamic list or charts . And I want the employee to develop this direction - find out the needs of users of this mechanism, communicating with users on forums and conferences, compile lists of new features, set priorities for them, understand the problems of the mechanism, suggest solutions. If a person is interested, he can develop as a tmlid, starting with the supervision of student interns from our Center for Young Specialists , and later leading his team. Well, if a person is a “pure” developer by nature, who prefers working on TZ and is not very interested in understanding the needs of users - well, we need such people.

    Should a programmer test? Of course! A programmer who does not do tests is like a cook who does not try what he has prepared. It is not possible, of course, to demand full tests from a programmer on all supported environments (Windows, Linux, macOS, web and mobile clients), but he is obliged to check the basic functionality on the current OS. Well, even better if you write an automatic test. This will be a ready-made regression test, which will go to the test library and will be regularly run when changing in the appropriate area of ​​the code.

    1C Development Group : Enterprise Development Tools


    1C: Enterprise Development Tools is written in Java, and we are looking for developers and testers with knowledge of Java. We are looking for people with glowing eyes, both professionals and beginners with potential. Knowledge of Java is obligatory for us, as well as knowledge of algorithms and data structures, multi-threaded programming; in our team, we unfortunately cannot afford to wait until the new developer learns these things. But knowledge of the specific frameworks that we use ( EMF , Xtext , GEF , Lucene , Handly , ...) is a gain. If you can see that the person is well-informed and comfortable with him to communicate - it means that he will fit into the team and quickly get the necessary knowledge.

    In general, the entry into the team is probably the main criterion for us, along with professionalism. Our team is a team of enthusiasts; I don’t want to dilute it with people of a different temper. And a person with a different character in our team will probably work uncomfortably. Unambiguous red flag for us - disrespectful style of communication. A person can be a very good professional, but if he cannot respectfully communicate with colleagues, he will not suit us. Our game is a purely team game.

    The peculiarity of the institute education is that the institutes do not teach industrial programming in the mass. Teach syntax, language constructs, algorithms. But the ability to write documented, accompanied code, in which the possibilities of development are laid, extensibility is taught in very few places. Therefore, at the interview a very important type of tasks - design tasks. For example, we ask how the candidate would write Tetris, what components would he divide the project, what interfaces would he design for the interaction of the components between themselves. Further, we complicate the introductory - for example, we say that Tetris will be three-dimensional (or new types of shapes will be added, or the figures will fall from different sides) and see how well the chosen design fits under the changed conditions. In general, one of the main tasks of the interview is to understand how flexible and broad the candidate can be. And of course, the programmer must write tests, at least - unit tests, and integration tests would be good. The standard question for the design problem is - how will you test the designed system?

    Well, for a tester the ability to think broadly is even more valuable! There is a well-known joke, as a tester tested a bar: ordered one mug of beer, 2 mugs of beer, 0 mugs of beer, 999999999 mugs of beer, –8 mugs of beer, qwertyuip mugs of beer, and after putting the project into production, a client came into the bar and asked - and where restroom? The main skill of the tester is to invent non-standard (and at the same time realistic) scenarios; Standard scripts are usually tested by the developer.


    How not to give a link to open vacancies here :)

    And you can also just send a resume to job@1c.ru .

    Also popular now: