Skip to content
View mikhail-molchanov's full-sized avatar
  • Embase, Elsevier
  • Astana

Block or report mikhail-molchanov

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Please don't include any personal information such as legal names or email addresses. Maximum 100 characters, markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
mikhail-molchanov/README.md

About

Hello, my name is Mikhail Molchanov. I'm experienced software developer specializing in building modern Web applications using Typescript and React. For the time being I work as Senior Front-End Engineer (contractor) at Embase partnering closely with an international team located in Amsterdam.

Contact me:

Summary

15+ years in the industry of creating, migrating, and maintaining reliable software solutions. I focus on product quality, delivery schedule and long-term maintainability. I believe myself to be good at establishing best coding practices. I have a keen eye for details that helps to improve product consistency. I'm passionate about building great UIs through small and predictable iterations based on customers feedback.

Personality traits

  • Responsibility. I take full ownership of assigned tasks and features regardless of their size and importance.
  • Transparency. I communicate clearly and timely the state of development process: pending questions, blocking problems, insufficient expertise, possible workarounds etc.
  • Persistance. I make sure development time is stable and predictable. Staying positive while overcoming difficulties is an essential skill. I'm not afraid to say that I don't know something or stuck at the moment, it's just a matter of planning for more iterations.
  • Listening. I do enjoy listening to people in general and I appreciate the time they spend talking to me. A side-effect being that I believe that focused meetings with fewer attendees are the most effective ones.
  • Team play. I know how hard it is to create and maintain a motivated team and how much more productive a good team can be. I do my best to establish trustful relationships within the team, make my contribution clear and support other roles whenever possible.
  • Passion. Nothing motivates me more than being around people who have a passion for what they are doing, a desire to improve, risk, innovate and share their ideas.
  • Details. I have developed a keen eye for details that I try to use for the benefits of the product. I spot things like typos, wording / visual inconsistencies between different parts of the app (and even cross-product), misalignments, code duplications. I do believe that attention to details is something that makes a product stand out and defines its quality.

Skills

Process

  • Focus on customer value and delivery schedule. While I do enjoy writing the code a lot I realize that it doesn't have much value on it's own. A brilliant algorithm or clever design worth nothing if they're not aligned with questions like "who is gonna benefit and how?" and "what it's gonna cost us in terms of development / testing time".
  • Agile practices, requirements grooming, tasks breakdown, planning, sprint demos.
  • Understand the importance of code review for both myself and my peers. Keeping pull requests small and focused add to the speed and quality of review process. I'm able to maintain positive and productive argumentation. I do respect and appreciate the time people spend doing code review for my own code and I always make sure all comments and questions are covered before starting the next iteration.
  • Translate high-level business ideas into technical design and requirements.

Programming

  • Design patterns (and anti-patterns) and principles for clean and maintainable code. I believe keeping knowledge of fundamentals in a good shape helps tremendously when it comes to moving to new frameworks and technologies.
  • 4+ experience with TypeScript. I came from the world of statically typed languages but using TypeScript is something that I enjoy even more. I like how practical it is and how it tries to help developers rather than enforce certain rules on them.
  • Experience in creating and maintaining a library of UI components shared between multiple products (React + Typescript). Not only it allows to speed up development process but also increases productivity of communication with UX team.
  • Embraced React hooks, functional components and declarative approach that comes with them early on. Understand the drawbacks and caveats too.
  • Solid understanding of state management problems. I know by experience what usually belongs to local and global states. What should be persistent. When and how libraries like Redux can help and also the cases when they bring more harm than advantage. I don't believe that Context API is a replacement for Redux.
  • Deep understanding of testing approaches, experience in test-driven development. I know why unit / integration/ snapshot tests are important, when to use and what to cover.
  • I document source code, add comprehensive description in documentation system for every implemented feature. I consider specifications and tests to be an essential part of Definition of Done.
  • When contributing to existing code base I try to conform with styles, structure and rules even if I disagree with some aspects. At the same time I categorize things that can be done better and add them to the plan of solving technical debt.

UX

  • Good understanding of usability principles. Experience in responsive layouts and prototyping interfaces. Experience in customer interviews.
  • Follow basic accessibility principles for every new feature. Make sure all UI elements can be accessed / navigated from keyboard, proper semantic markup is used. Certified web accessibility specialist (Deque University). Primary tools for accessibility testing: Axe plugins and NVDA.

Tools

  • My IDE of preference is VS Code (+plugins). I had some painful transition period from Intellij IDEA but now I'm extremely satisfied with its features, speed and how the product is developing over the years.
  • I use Storybook daily and understand its benefits over Styleguidist. On recent projects stories were also used for snapshot testing.
  • Solid experience with source control systems. Understand different branching strategies and how they align with approaches for releases. Prefer short-lived branches. Commit my code multiple times per day. Provide commit messages according to established patterns.
  • Experience in integration of client apps with tracking / reporting frameworks (Adobe, Pendo, Mouseflow, COUNTER).

Other

  • Understand the importance of introducing things like coding style guides, check-lists, linting, auto-formatting and other practices early in the project lifecycle.
  • Experience in legacy browsers support (IE9 mainly) and migration of legacy code bases to React.
  • Understand that small things do matter. Starting from naming function, variables, routes and API endpoints to text wording, consistent language, truncations, paddings, responsiveness etc.

Technical stack

  • TypeScript, JavaScript
  • React JS, React Router, Redux, Redux Observables, Redux Toolkit, react-use
  • React Table, Final Form
  • Jest, React Testing Library, Mock Service Worker, SASS, CSS Modules
  • Webpack, Rollup
  • Storybook, Styleguidist
  • Prettier, EsLint, StyleLint
  • GitHub, GitLab

Tools

  • VS Code + plugins, IntelliJ IDEA
  • GitHub / GitLab
  • Jira, Confluence
  • Jenkins, SonarQube
  • Postman

Work experience (web development)

Senior Front-End Engineer, 2020 – Present

Embase, Elsevier, Remote

Embase is an industry standard for biomedical research allowing to build, perform, and persist search strategies of great complexity across biomedical databases, work with search results and hierarchical data, set up email alerts and share findings. I joined Embase team to help with migrating existing web application to modern technology stack and make it consistent with company’s global design system:

  • Technical stack: TypeScript, React (functional components, React Router 6.x), CRA, Final Form, Axios, SASS + CSS Modules, Storybook, React Testing Library, Mock Service Worker.
  • Migrated legacy parts of the web-app (Backbone, Angular) to React in a granular manner allowing to run legacy and new code in parallel. Focus on responsiveness and accessibility.
  • Developed new features:
    • PubMed to Embase query syntax translator integrated with Embase Emtree taxonomy, the tool got positive feedback from the audience.
    • Chat interface for SciBite AI engine that allows to use human language to search for relevant results in an iterative manner as opposed to traditional Embase query syntax. It is now undergoing Beta testing.
  • Implemented integrations with 3rd-party systems (Adobe Launch, Pendo, Mouseflow, OneTrust, NewRelic).
  • Heavily contributed to overall accessibility of Embase interface, the target compliance level was AA (semantic markup, color contrast, keyboard access etc).
  • Setup re-usable patterns for state management, UX and data flow that allowed to decrease number of iterations and delivery time for every new page.
  • Provided documentation for every migrated feature that includes technical details, usability aspects and history of decision making.
  • Worked closely with UX/PO to make sure the best user experience is provided.
  • Established a culture of using front-end prototypes for new features to better communicate requirements with UX/PO and get early user feedback.
  • Increased test coverage from 30% to 90+%. Held the initiative of popularizing testing practices in general among colleagues.
  • Major contributor to the library of React UI components that implements the company design system. The integration portfolio includes several marketed products (Embase.com, Pharmapendium.com and others). The library significantly reduced the time needed to maintain consistent look and behavior of UI components across multiple products including both development and design efforts. GitHub repository was configured to automatically send release notifications to dedicated Slack channel. Technical stack: TypeScript, React, Rollup, CSS Modules, Storybook.

Senior Front-End Engineer, 2018 – 2020

Quosa, Elsevier, Saint-Petersburg, Russia

A modern re-think of a popular literature sharing and management desktop tool:

  • Technical stack: React, TypeScript, Redux, Redux Observables / Redux Toolkit, CSS + BEM
  • Supported full cycle of developing the idea into MVP and making it a market-ready solution
  • Shared key expertise in the domain of the legacy app with other parties to make sure new product will only inherit the best parts.

Front-End Engineer, 2014 – 2018

Pharmacovigilance, Elsevier, Saint-Petersburg, Russia

An online tool for monitoring and performing periodic research (ICSR, PSUR) over medical resources related to adverse effects:

  • Technical stack: AngularJS (1.x), JavaScript, HTML5
  • Implemented critical parts of the app: Dashboards, Backlogs management, Review, Document Delivery and Administration.
  • Customization of complex workflows depending on customer needs.
  • Worked in traditional Agile environment, short experience as Interim Scrum Master and Head of Development.

Work experience (desktop applications)

Software Developer, 2008 - 2014

Retek, Saint-Petersburg, Russia

Quosa, a desktop productivity tool for searching, analyzing, managing and sharing bibliographic records.

  • Technical stack: C++, WinAPI, MFC, Lucene.
  • Developed new features both Windows desktop application and web browser plugin.
  • Designed and implemented advanced technique for publishing multiple lists of records in parallel which allowed to unlock the UI during time-consuming operations.
  • Maintained parser engines for popular online databases like Pubmed, Ovid and Embase that enabled offline access for records found through native search interface.

Software Developer, 2005 - 2008

Eureca, Saint-Petersburg, Russia

Stationary and portable health monitoring complexes with telemedicine services support for hospitals:

  • Technical stack: C#, Microsoft .NET, MS SQL, WinAPI.
  • Developed client part of the application including visual design.
  • Suggested effective approach for data replication.
  • Developed an administrative application for monitoring alive state of database servers.
  • Developed a tool for checking .NET assembly health.

Software Developer, 2004-2005

Impuls, Saint-Petersburg, Russia

Scoreboard administration console for St.Petersburg Open Tennis Cup:

  • Technical stack: Borland Delphi, Pascal, COM.
  • Developed client application that increased efficiency of propagating current game score to both stadium's scoreboard (through COM port) and tournament's online statistics (via HTTP). The app has successfully run for several years requiring zero maintenance efforts.

How I work

  • Motivation. I do like to feel the impact of my work. It shouldn't be always direct increase in company's revenue or users satisfaction. It is also small things like ensuring the consistency of requirements or an extra comment in the source code help my colleagues to save their time or efforts.
  • Engineer first. While the engineer and developer terms are widely interchangeable these days I like the former more since it communicates clear purpose of solving technical problems. That's why my preferred way of starting discussions about new features is to talk about the problems we are aiming to solve for the users. More often than not introducing mockups and diving into details they bring in the early stages actually distracts us from understanding important things like general value, dependencies, data flow.
  • Focus. I'm not a great multi-tasker. Usually I don't bring much value in brainstorming sessions. I prefer to have a plan and work according to it mostly offline. I would rather skip a meeting where I'm not a mandatory attendee and focus on things where my expertise belongs.
  • Demos. I like doing internal demos about the things I've been working on and hear the feedback. I'm able to present what has been done in recent sprint in a manner that all parties can understand. I put emphasis on where implemented changes are standing in terms of product value and release schedule and what will come next.
  • Why front-end? It's a common thing in the community to treat challenges on front-end side as inferior to the ones that developers have to solve on the server side. I believe those are quite different and can't be compared directly. On front-end we usually don't have to deal with complex algorithms, data structures, synchronization, message queues and databases. The complexity comes from the fact that we have to deal with environment that is highly unpredictable and influenced a lot by how people interact with interfaces. Having an app that is both fast, beautiful, efficient, responsive and accessible it still an art and essential part of product success. There is also a countless number of ways same problem can be solved on the UI that we should carefully pick a right one from. Users may have different background and qualification and also literally perceive same looking things differently. I find it extremely satisfying to see how all the time and efforts we've spent to build the app translate into a happy user experience.
  • Prototypes. Encourage UX / designers to save their time doing pixel-perfect mockups. Instead, let's come up with patterns / design systems that we can use as a dictionary to communicate core business values and ideas behind every page / feature in a more productive way. If it is easier to make a prototype on the front-end side and then work out from there - let’s do it. It takes time but it pays off in the long term.
  • Remote work. I have 3+ years experience of working fully remote. While it proved to have no impact on productivity and delivery schedule it makes you miss people in the office a lot. The best option would be to have flexible schedule that imply having important discussions face-to-face and occasional socialization in the office while regular work activities could be held remotely.

Programming languages evolution

Basic > Delphi Pascal > C# > C++ > JavaScript > TypeScript

Technologies I wish I could be better at or have some / more experience with

  • Micro-frontends
  • Alternative state management libraries (e.g MobX, Jotai)
  • Other UI frameworks (Vue, Svelte)
  • Web Components
  • Web Sockets
  • SSR-enabled React frameworks (e.g. Next.js)

What else?

  • I'm married, we have two little daughters that are already quite proficient at annoying the hell out of us. They can be sweetest angels too.
  • We enjoy going out in nature with light off-road adventures.
  • I can talk a bit about photography and lenses but my pictures are slightly less impressive.
  • I listen to Ambient music mostly.
  • I own a guitar and electric piano but I'm not even remotely good at playing them. But I'd love to :)
  • I used to do mountain bike trials so I don't fall out of the bike when it stops. If I'm lucky enough I can also get on the rear wheel.

Popular repositories Loading

  1. mikhail-molchanov mikhail-molchanov Public

    Config files for my GitHub profile.

  2. leet-code leet-code Public

    TypeScript

  3. react-aria-live react-aria-live Public

    Forked from AlmeroSteyn/react-aria-live

    A port of AlmeroSteyn/react-aria-live repo using TypeScript / React hooks

    JavaScript