Skip to main content

Welcome

Isik

Isik

Backend Team Lead @ vivoo

Huseyin Isik is a Software Developer and Entry Level Backend Team Leader with over 5 years of startup experience in the industry.

His core expertise is Node.js, Nest.js, Express, Vue.js, MongoDB, Docker, Kubernetes, Git, Microservices, GitLab CI/CD and Linux. He contributes to open source projects and shares his work on his Github(https://github.com/isikhi) and GitLab(https://gitlab.com/isikhi) accounts.

At Vivoo, he is responsible for the backend and process infrastructure of the first home urine test and mobile application supported by artificial intelligence/machine learning. Duties include project maintenance, remote team management, software development lifecycle analysis and planning, code reviews, solution development, continuous integration/continuous deployment, development of scalable monolithic and microservice architectures, database optimization and documentation. It attaches great importance to security and data privacy issues and integrates authentication and authorization technologies such as OAuth 2.0 and AWS Cognito into projects. Additionally, it establishes structures to meet different language and localization requirements for the development of international applications.

By education, he graduated from Marmara University with a pre-bachelor degree in Biomedical Device Technologies and a bachelor's degree from Anadolu University, Department of Management Information Systems. He also holds certifications in NestJS Fundamentals and Introduction to Machine Learning.

For a short period of time, he volunteered as a coding teacher at the Contemporary Life Support Association and gave basic science and coding training to children between the ages of 9-18. In this way, it aims for children to become producers as well as consuming new media and the internet as conscious users.

Huseyin Isik, who has strong written communication skills, attaches importance to teamwork and mentoring. Working in close cooperation with product owners and other stakeholders, it accurately analyzes customer needs and offers solution suggestions. Additionally, it actively uses code reviews and programming techniques to maintain code quality and project standards.

Huseyin Isik is a Backend Team Leader and Software Developer who adopts modern DevOps approaches and is motivated by the desire to constantly learn and improve himself. In addition to his technical skills, he stands out with his leadership, communication, problem solving and basic project management skills.

Mid / Senior Backend NodeJS Technical Interview | Application to Offer Part 1/2

Isik

Isik

Backend Team Lead @ vivoo

Applying for a mid/senior backend position is an exciting milestone in your career as a software developer. It signifies a step towards greater responsibility, challenging projects, and opportunities for professional growth. However, before embarking on this journey, it is crucial to thoroughly understand the issues that need to be studied and the process that lies ahead. In this article, we will delve into the essential considerations and provide insights into the path from the interview stage to receiving an official offer for a mid/senior backend position.

Part 2 Read from click here:

  1. Self-Assessment and Preparation: Before applying for a senior backend position, take the time for self-assessment. Reflect on your skills, experience, and achievements. Consider the technologies, frameworks, and tools you have worked with and identify areas for improvement. This introspective process will help you align your strengths and goals with the requirements of a senior role. Additionally, invest time in honing your technical skills, staying updated with industry trends, and exploring advanced backend concepts.

  2. Researching the Company and Position: Thorough research about the company and the senior backend position you are applying for is essential. Understand the companyÔÇÖs mission, values, and culture. Familiarize yourself with their products, services, and the technology stack they employ. Analyze the job description to identify the key responsibilities and required skills. This knowledge will enable you to tailor your application and interview responses to align with the companyÔÇÖs needs, demonstrating your genuine interest and enthusiasm. Then compare your own profile with this information, and if it is what you want, summarize why you want it in a paragraph and send this summary directly to the recruiter department of the company as a cover letter. If there is a job that is incompatible with you, I would not recommend applying and furthering the process. Each process costs both the company and the person a lot of hours. Apply for jobs of your caliber that you really want to do.

  3. Preparing for Technical Interviews: PS: I have an another article for backend positions if you are backend developer you should read part two: https://medium.com/@huseyin.isik000/mid-senior-backend-nodejs-technical-interview-application-to-offer-part-2ÔÇô2-cf94489db96b

Technical interviews for senior backend positions are designed to evaluate your expertise, problem-solving abilities, and technical acumen. Prepare by revisiting fundamental backend concepts, data structures, algorithms, and design patterns. Brush up on database management, API development, performance optimization, and security best practices. Additionally, anticipate coding challenges and practice solving problems on platforms like LeetCode or HackerRank. Strengthen your ability to communicate your thought process and explain your solutions concisely. As far as I can see, companies other than top tier (FAANG or similar) companies pay more attention to design patterns, aptitude for concepts, writing clean code, system design and scaling, rather than expecting you to be extremely good at algorithms.( It is changing by company ). Generally, in mid/senior backend developer roles, more on-code issues are progressed. Your software engineering knowledge, your competence in your job, and your adaptation to the position are measured. As the seniority in the position increases, some interviews may come up with questions about problem solving, conflict resolution, mentor-mentee, and human relations within and between teams.

  1. Showcasing Experience and Projects: Highlighting your experience and previous projects is crucial in the journey to a senior backend position. Develop a comprehensive portfolio that showcases your expertise, the complexity of projects you have worked on, and the impact you made. Emphasize your contributions, technical challenges overcome, and the outcomes achieved. Providing tangible examples of how you have optimized performance, improved scalability, or implemented robust security measures will substantiate your abilities to potential employers. For example you can say: ÔÇťBy setup distrubuted tracing mechanism on 30 services using ElasticApm, I reduced the time that the company spent 30 hours debugging per month to 3 hours.ÔÇŁ ItÔÇÖs great if you have a github/gitlab/stackoverflow etc. profile where you contribute to open-source projects, but if you donÔÇÖt, feel free to show and promote your private projects.

  2. Effective Communication and Soft Skills: While technical prowess is crucial, soft skills and effective communication are equally important for a senior roles. Practice articulating your thoughts clearly, both verbally(I can say that I conceded the most goals from here :/ ) and in written form. Develop your ability to collaborate with cross-functional teams, empathize with stakeholders, and present technical concepts to non-technical audiences. Strong leadership, problem-solving, and adaptability skills are highly valued in senior positions.

By addressing these key considerations and diligently preparing for the interview process, you can confidently navigate the path to a senior backend position. Remember to showcase your technical expertise, highlight your experience, and demonstrate your strong communication and soft skills. With perseverance and a proactive approach, you will increase your chances of securing an official offer and taking the next step in your career.

Summary: This article provides guidance for software developers applying for middle/senior backend positions. We talked about the importance of self-assessment and preparation, including reflecting on skills and identifying areas for improvement. Thorough research on the company and the position is crucial to tailoring applications, preparing a cover letter, and showing genuine interest. Technical interview preparation includes reviewing key concepts, problem-solving skills, and coding challenges. Demonstrating experience and projects, emphasizing contributions and results is essential. Effective communication and soft skills, along with technical prowess, are invaluable in senior roles. By addressing these issues and preparing with care, developers can increase their chances of getting a formal offer and advancing their careers.

Mid / Senior Backend NodeJS Technical Interview | Application to Offer Part 2/2

Isik

Isik

Backend Team Lead @ vivoo

Before entering technical interviews for the Mid/Senior Backend Node.js Developer or similar Backend positions, there are several things to consider. In the following, I will provide a detailed explanation of key aspects and pay to attention points.

Here, instead of interviews for online coding assestments or algorithms, which are the pre-qualification, I explained the important points about the skillset required to pass the interviews in companies that conduct interviews in the form of framework/concept/project hand-on-experience and get official offers.

Part 1 Read from click here:

In-depth knowledge of Node.js: As a Senior Backend Node.js Developer, you are expected to have a strong command of Node.js. Make sure you have a deep understanding of the Node.js runtime, event-driven architecture, and asynchronous programming concepts. Familiarize yourself with the core modules, package management (NPM/Yarn), and popular frameworks such as Express.js, Koa.js, or Nest.js. Nest is highly popular nowadays ­čÜÇ

Here is the backend key concepts:#

  1. JavaScript proficiency: Since Node.js is built on JavaScript, it is crucial to have a solid understanding of the language. Be well-versed in modern JavaScript features, object-oriented programming principles, and functional programming concepts. Ensure you are familiar with ES6+ syntax, closures, promises, and async/await.

  2. Web technologies and protocols: As a backend developer, you will interact with various web technologies and protocols. Gain knowledge of RESTful APIs and their design principles, HTTP/HTTPS protocols, status codes, headers, and request/response mechanisms. Understand how to handle cookies, sessions, and implement authentication and authorization mechanisms such as JWT. Besides, information on basic network communication such as port forwarding, load balancing, proxy will be great.

  3. Data storage and databases: Backend developers often work with databases. Gain proficiency in database concepts and technologies, particularly related to Node.js. Understand different database types (relational and NoSQL), query languages (SQL, MongoDB query language), and database modeling. Knowledge of ORMs (e.g., Sequelize, TypeORM) or ODMs (e.g., Mongoose) is also valuable.

  4. Testing and debugging skills: Employers value developers who can write clean and bug-free code. Familiarize yourself with various testing methodologies, such as unit testing, integration testing, and end-to-end testing. Learn popular testing frameworks like Mocha, Jest, or Chai, and understand how to use tools like Postman or Insomnia for API testing. Showcase your ability to write effective test cases and debug issues efficiently.

  5. Performance optimization: Backend developers need to optimize application performance. Understand how to profile and identify performance bottlenecks in Node.js applications. Learn techniques for code optimization, caching, and database query optimization. Familiarize yourself with tools like pm2, prometheus etc. for performance monitoring and load testing(k6.io or similar tools great).

  6. Security best practices: Security is a critical aspect of backend development. Gain knowledge of common security vulnerabilities, such as cross-site scripting (XSS), SQL injection, and cross-site request forgery (CSRF). Learn best practices for securing APIs, implementing encryption, and handling user authentication and authorization securely. Stay updated with the latest security trends and vulnerabilities. Authentication systems and OAuth mechanism basics should at least be known theoretically

  7. Scalability and concurrency: Backend systems often face scalability and concurrency challenges. Demonstrate your understanding of techniques for scaling Node.js applications, such as load balancing, horizontal scaling, and caching. Understand how to manage concurrent requests, handle race conditions, and use asynchronous patterns effectively. This is a deep subject that includes many design techniques. Many components need to be looked at one by one. Architecture, database, queue structures etc.

  8. Messaging Queue Systems: Firstly, these systems enable scalable and resilient architectures by decoupling components and promoting asynchronous communication. They facilitate loose coupling and microservices, allowing for independent evolution of services. Messaging queues ensure message order and reliability, crucial for scenarios like financial transactions. Integration capabilities enable communication with external services and multiple channels. Lastly, systems like RabbitMQ and Kafka excel at handling real-time data streams, enabling event sourcing, log processing, and real-time analytics. Understanding and using these messaging queue systems showcases expertise in building scalable, resilient, and data-intensive backend systems, making senior backend developers highly valuable in job interviews. If you work with one of these ÔÇťAWS SQS, SNS, RabbitMQ, and KafkaÔÇŁ it would be great.├╝

  9. Scheduled & Cron Jobs: These systems enable the automation of recurring tasks and scheduled operations, such as data backups, data synchronization, and periodic data processing. By leveraging cronjob and scheduled job systems, developers can ensure the timely execution of these tasks, improving efficiency and reducing manual effort. Understanding these systems also demonstrates proficiency in optimizing workflows, maintaining critical backend operations, and implementing efficient background processes. Having experience with cronjob and scheduled job systems showcases a developerÔÇÖs ability to design and manage reliable, automated systems, making them valuable candidates during job interviews. I can suggest to take a look & hands on experince on linuxÔÇÖs cron, Redis cron system

  10. Version control systems: Proficiency in version control is crucial for collaborative software development. Familiarize yourself with Git, including common Git commands and workflows. Understand concepts such as branching, merging, rebasing, and resolving conflicts. Showcase your ability to work with remote repositories, use branching strategies effectively, and collaborate with other developers.

  11. Real-world project experience: Prior experience working on real-world projects is highly valuable. Highlight your previous projects, emphasizing your contributions, responsibilities, and outcomes. Discuss challenges you faced and how you overcame them. Provide examples of project-specific achievements, such as optimizing performance, improving scalability, or implementing robust security measures.

  12. Stay updated with industry trends: The tech industry is constantly evolving, and staying updated is essential. Keep abreast of the latest trends, frameworks, libraries, and tools relevant to Node.js development. Follow reputable websites, blogs, and forums, and participate in relevant communities and online discussions. Employers appreciate candidates who show enthusiasm for continuous learning. Practice coding challenges and system design: Technical interviews often include coding challenges and system design questions. Practice solving coding problems using platforms like LeetCode, HackerRank etc.

Additionally, study system design principles and practice designing scalable and efficient architectures for real-world scenarios. Those on the application side are like this, you need to know a little bit about devops. Although you write a backend, you can better understand where to put the parts while designing the system, with the logic of devops, to understand which layer comes out in case of containerization or a problem. At the same time, if an approach suitable for continuity and agile manifesto is desired, DevOps practices offer great mindsets for this continuity. These concepts may be a bit extreme for a mid-level backend developer. However, in many places where modern technologies are used, these concepts now form the basis of infrastructures.

These areas play crucial roles in modern application development and deployment.

DevOps Mindset:#

DevOps focuses on bridging the gap between development and operations teams, ensuring efficient collaboration and streamlining the software delivery process. Familiarize yourself with DevOps principles, tools, and practices, including:

  • Continuous Integration and Continuous Deployment (CI/CD): Understand CI/CD pipelines, which involve automating the building, testing, and deployment of software. Learn popular CI/CD tools like Jenkins, Travis CI, or GitLab CI/CD.
  • Infrastructure as Code (IaC): Gain theoretical knowledge of provisioning and managing infrastructure using code. Learn basic concepts about tools such as Terraform or AWS CloudFormation to define and deploy infrastructure resources.
  • Monitoring and Logging: Learn about monitoring tools (e.g., Prometheus) and logging solutions (e.g., ELK Stack) to ensure proper observability and troubleshoot issues effectively.

Docker(Containerization Concepts):#

Docker is a popular containerization platform that allows developers to package applications and their dependencies into isolated containers. Understanding Docker is crucial for efficient application deployment and scalability. Consider the following aspects:

  1. Docker Compose: Understand how to define and manage multi-container applications using Docker Compose, including services, networks, and volumes.
  2. Container Orchestration: Gain knowledge of container orchestration platforms like Kubernetes, which provide advanced features for managing containerized applications at scale.

Kubernetes:#

Kubernetes is a container orchestration platform that automates the deployment, scaling, and management of containerized applications. Proficiency in Kubernetes is highly valuable, especially for deploying and scaling Node.js applications. Consider the following areas:

  1. Kubernetes Architecture: Understand the components of a Kubernetes cluster, such as nodes, pods, services, and deployments.
  2. Deployment Strategies: Learn about different deployment strategies, including rolling updates, blue-green deployments, and canary releases.
  3. Scaling and Load Balancing: Gain knowledge of scaling applications horizontally and configuring load balancers within a Kubernetes cluster.
  4. Monitoring and Autoscaling: Familiarize yourself with Kubernetes-native monitoring tools like Prometheus and Grafana. Understand how to configure autoscaling based on metrics like CPU utilization or custom metrics.

### Conclusion / Summary In conclusion, the technical interview process for mid/senior backend developers can be challenging, but it is important to be prepared and to practice your skills. Even if you do not know everything in depth, knowing the logic of work, small experiences in similar situations make the person stand out in such interviews. This information is very important for general positions, not for positions that belong to areas that are known in depth.

By following the tips in this article, you can increase your chances of success and land your dream job.

Feel free to contact with me!

Nx ve NestJs Kullanarak Monorepo Y├Ânetimi

Isik

Isik

Backend Team Lead @ vivoo

Nx monorepo y├Ânetim arac─▒, Nest.js Nodejs framework├╝ Nx, Node.js tabanl─▒ front end ve backend uygulamalar─▒n─▒ ve pluginleriyle beraber di─čer ortamlar─▒ da destekleyebilen(├Ârne─čin nx-go ile golang) bir monorepo y├Ânetim arac─▒d─▒r.

├ľncelikle monorepodan bahsedelim, monorepo nedir? Monorepo isminden de anla┼č─▒ld─▒─č─▒ gibi projenin t├╝m kaynak kodlar─▒ ve assetlerinin tek bir repoda topland─▒─č─▒ bir proje repository y├Ânetim stratejisidir. En bilindik ┼čirketlerden olan Google, bu yakla┼č─▒m─▒ benimseyerek milyarlarca sat─▒r kodu tek bir repoda tutuyor. Detaylar i├žin: https://dl.acm.org/doi/fullHtml/10.1145/2854146

Monolith bir uygulama tek bir repoda da y├Ânetilebilir, birden fazla repoya da b├Âl├╝nebilir. Benzer ┼čekilde microservislerden olu┼čan ├žoklu uygulamalar tek repoda yani bu yaz─▒m─▒zda ge├žen monorepo olarak da y├Ânetilebilir kendi multi repolar─▒na da b├Âl├╝mlenebilir.

Biz vivooÔÇÖda farkl─▒ b├Âl├╝mler/projeler i├žin farkl─▒ stratejiler izlesek de birazdan bahsedece─čim backend/api i├žin monorepo y├Ânetim arac─▒ olan nxÔÇÖi kullanarak microservisleri y├Ânetiyoruz.

Monorepo kullanarak sa─člad─▒─č─▒m─▒z belirgin avantajlar ┼ču ┼čekilde: 1- Backend servisleriÔÇŐÔÇöÔÇŐprojeleri aras─▒ndaki kullan─▒lan ortak k├╝t├╝phaneler, ba─č─▒ml─▒l─▒klar ve veri tiplerini kolayca birbirine payla┼čt─▒rabiliyoruz.

2- Tek bir altyap─▒ yap─▒land─▒rmas─▒n─▒ t├╝m servislerde kullanabiliyoruz. Asl─▒nda bu konu monorepolar─▒n derleme s├╝relerinde bir dezavantaj gibi g├Âz├╝kse de nx, docker ve bir ka├ž bash script sayesinde bu dezavantaj olduk├ža azal─▒yor. Sadece affected projeleri paketleyip yay─▒nlayabiliyoruz.

3- Kullan─▒lan dependencyler t├╝m projelerde en g├╝ncel haliyle kal─▒yor. Bir tanesini g├╝ncelledi─čimizde hepsi g├╝ncelleniyor.

Monorepoya ge├žerken dikkat edilmesi gereken ├Ânemli bir ┼čey testlerin yaz─▒l─▒yor olmas─▒. ├ľrne─čin x librarysini kullanan 20 tane uygulama/proje/servis varsa ve bir ki┼či gidip x librarysini g├╝ncelledi─činde o k├╝t├╝phane ya da uygulamalar─▒n baz─▒lar─▒nda testler do─čru yaz─▒lmad─▒ysa ortak kullan─▒lan yerdeki bir de─či┼čiklik bir ├žok serviste yay─▒n s─▒ras─▒nda hataya sebep olabilir. O y├╝zden dikkatli olunmas─▒ gerekiyor.

Neden NX tercih ettik? An itibariyle(2021) a├ž─▒k kaynak kodlu javascript teknolojileri ├╝zerinde y├Ânetim arac─▒ olarak kullanabilecek 2 opsiyon var. Bu opsiyonlar alt─▒nda yarn kullan─▒ld─▒─č─▒ i├žin yarn workspaceÔÇÖi dahil etmedim.

1- Nx

2- Lerna

Lerna olduk├ža g├╝├žl├╝ bir ara├ž olsa da bizim her servisi ayr─▒ca paket olarak tasarlamaya ve bunlar─▒ yay─▒nlamaya de─čil de ┼čirket i├žerisinde uygulama geli┼čtirmeyi daha efektif hale getirmeye ihtiyac─▒m─▒z vard─▒. GoogleÔÇÖ─▒n yakla┼č─▒mlar─▒n─▒ benimseyerek geli┼čtirilen Nx, LernaÔÇÖdan farkl─▒ olarak t├╝m proje i├žin tek bir package.json sa─čl─▒yor. LernaÔÇÖda her projenin kendi package.jsonÔÇÖ─▒ varken nxÔÇÖde t├╝m dependencyler tek bir yerden y├Ânetiliyor. NxÔÇÖde istenirse yarn workspace kullanarak bunu ├žoklu paket sistemine ├ževirmek m├╝mk├╝n olsa da pratik olarak ├Ânerilmiyor. GoogleÔÇÖ─▒n yakla┼č─▒m─▒ burada baz al─▒nm─▒┼č. https://github.com/nrwl/nx/issues/1777 bu issueÔÇÖdan ilgili yaz─▒┼čmalar─▒ okuyabilirsiniz. LernaÔÇÖdan NxÔÇÖ ge├žmek ile alakal─▒ kurucular─▒ndan bir Victor SavkinÔÇÖin yazd─▒─č─▒ bir blog var detaylar─▒ buradan okuyabilirsiniz. https://blog.nrwl.io/why-you-should-switch-from-lerna-to-nx-463bcaf6821

NxÔÇÖin ├Âne ├ž─▒kan ├Âzelliklerine biraz daha bakal─▒m:

Dependency Graph: Nx ile proje grafi─čindeki d├╝─č├╝mler workspace.json i├žinde tan─▒mlan─▒yor. D├╝─č├╝mler aras─▒ndaki ba─č─▒ml─▒l─▒klar─▒ nx kendi ba┼č─▒na halletse de manuel olarak tan─▒mlayabiliyoruz. Ayr─▒ca ├Ânceden tan─▒mlanm─▒┼č grafi─či ├Ânbelle─če al─▒p yaln─▒zca de─či┼čtirdi─činiz dosyalar─▒ yeniden analiz ediyor. Affected Commands: Nx ile ilgili projeyi, ├žoklu projeleri ve t├╝m projeleri ├žal─▒┼čt─▒rmak d─▒┼č─▒nda yaln─▒zca de─či┼čen ve bu de─či┼čikliklere ba─čl─▒ olan uygulamalar─▒ test etme, build etme imkan─▒m─▒z var. ─░lgili merge/pull request ile target ve base commit aras─▒ndaki farka bak─▒p sadece etkilenen projeleri ├žal─▒┼čt─▒rabiliyoruz. Computation Hashing and Caching: Nx ilgili bir g├Ârevi ├žal─▒┼čt─▒rken task s─▒ras─▒n─▒ kontrol eder ve ├žal─▒┼čt─▒rd─▒─č─▒ her g├Ârevi hashler. E─čer ilgili g├Ârev daha ├Ânce ├žal─▒┼čt─▒r─▒ld─▒ysa yani hash cacheÔÇÖde mevcutsa ilgili i┼čin ├ž─▒kt─▒lar─▒n─▒ h─▒zl─▒ bir ┼čekilde yerine getirir. Bunu yaparken local ya da cloud kullan─▒labilir. Distributed Task Execution: NxÔÇÖin komutlar─▒n─▒ NX Cloud kullanarak farkl─▒ makinelerde ayn─▒ anda ├žal─▒┼čt─▒rabilirsiniz. Nx Generators: Nx generatorler ile projemizde kullan─▒lan ve tekrar eden bir ├žok g├Ârevi ve yap─▒lar─▒ ├Âzelle┼čtirerek otomatikle┼čtirebiliyoruz. ├ľrne─čin s├╝rekli kulland─▒─č─▒m─▒z bir dosya yap─▒s─▒ varsa onu olu┼čturmas─▒n─▒ sa─člayan bir generator yazabiliriz. ├ľyleyse hadi NxÔÇÖi sistemimize kurup nest js ile bir uygulama aya─ča kald─▒ral─▒m. ─░kinci b├Âl├╝mde ise bu uygulamaya yeni bir uygulama ekleyip build, test ve deploy s├╝re├žlerine bakal─▒m.

ÔÇőÔÇőnpm install -g nx

npx create-nx-workspaceÔÇŐÔÇöÔÇŐpreset=nest

Nx cli

nx workspace

Vs code ile ilgili projeyi a├ž─▒p structereÔÇÖa bakal─▒m:

project_structure_architecture

Nx-NestJs CLI ile olu┼čturulmu┼č uygulama dosya dizini Nx ve Nest CLI sayesinde https://nx.dev/l/n/nest/overview buradaki d├Âk├╝manda bulabilece─činiz yard─▒mc─▒ commandler i┼čleri olduk├ža h─▒zland─▒r─▒yor.(not: yarn add -D @nrwl/nest ile nesti eklemeyi unutmayal─▒m)

Bir sonraki b├Âl├╝mde Nx kullanarak birden ├žok uygulaman─▒n test, build ve deploy s├╝re├žlerini anlat─▒p bir ka├ž ├Ârnek yapaca─č─▒z.

Yaz─▒da ve projede eme─či ge├žen ki┼čiler:

Huseyin Isik

Semih Onay