There are several paths to starting a career in software development, including the more non-traditional routes that are now more accessible than ever. Whether you're interested in front-end, back-end, or full-stack development, we offer more than 10,000 resources that can help you grow your current career or *develop* a new one.
Continuous learning is one of the guiding principles that all people should apply in their life. Reading is an excellent tool to learn, and it is a habit that we should all be doing on a regular basis. Since I love reading books about different topics, in this article, I'm going to share five books that have helped me a lot to improve as Engineering Manager. When we read a book, we should always remember three important things: Authors are sharing their knowledge, thoughts, or experiences based on their context or culture. These factors may be different from ours. The same book provides different values and learnings to each reader for the same reasons. Each reader has a different context, culture, habits, and previous knowledge. Books and methodologies provide guidance that helps us to improve, but they are not our owners. We must take what makes us better, adapt what does not fit, and especially think for ourselves in order to make decisions based on our context. Now let's go to the books that have helped me to better myself. Five Books That Have Helped Me Become a Better Manager The Manager's Path This is my favorite book about engineering management. In my opinion, it provides a clear vision of the Engineering Manager's roles. In my case, it reinforces some of my ideas and provides valuable information about some aspects that needed to be improved, such as 1-2-1 and performance reviews. The following topics were addressed: 1-2-1 and performance reviews Continuous feedback Mentoring How to manage people in different scenarios How to manage a team Managing managers If you are or want to be an Engineering Manager, you can't miss this book. The Goal: A Process of Ongoing Improvement This is a book written in 1992 that is about the optimization of production in a manufacturing factory. It is a great book that gives us a vision of how to manage and optimize a company based on the theory of constraints and work in progress (WIP). It is a book written in a novel format that provides you with knowledge through a suspense story. There is another book based on this that is focused on an IT department, The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win. I like these books because they project a journey in which they describe emerging issues, new challenges, and complex situations closer to the reality of what will be your career as an Engineering Manager. Team Topologies: Organizing Business and Technology Teams for Fast Flow It focuses on how to set up a dynamic team structure and interaction modes that can help teams adapt quickly to new conditions and achieve fast and safe software delivery. It provides valuable and clear information for understanding an IT structure and its interaction. Some of the points he describes you will already know, but it will help you to understand them better: Conway's Law with practical examples Three different organizational structures in every organization: Formal, informal, and value creation Four fundamental team topologies: Stream-aligned, Enabling, Complicated-subsystem, and platform The Obstacle Is the Way: The Timeless Art of Turning Trials into Triumph It is a book based on stoicism. Engineering Managers usually feel a lot of frustration generated by the management of uncertainty, emerging jobs, and multiple obstacles that appear in their day-to-day work. Sometimes we are more focused on what we cannot control and a misperception of situations. This book helps us to focus on the things we can control, let go of everything else, and turn every new obstacle into an opportunity, handle defeat and difficulty. We will learn how to deal with obstacles and how to react appropriately so that they do not hold us back. The Software Architect Elevator: Transforming Enterprises with Technology and Business Architecture It is a book that I recommend for both architectural and management roles. These two roles have many things in common. This book helps us to understand that a company is like a building with several floors, in which, on each floor, there are people speaking different languages and probably going in different directions. We will hear how an architect should ride an elevator up and down to talk with people on different floors to align them to go in one direction. Supporting the business strategy, connecting the dots, and avoiding over-engineering. This ability to communicate at different levels, simplification capacity, and alignment are capabilities that Engineering Managers must also have. What about technical books? Conclusion To support our teams to achieve their objectives, we must have knowledge of different areas and also understand the context of the company. These books provide information on five key aspects: people management, IT structures, company and process optimization, communication at different levels, and how to make a journey full of obstacles.
Cracking a machine learning interview at companies like Facebook, Google, Netflix, Snap, etc., really comes down to nailing a few patterns that these companies look for. In this article, I plan to share my experience interviewing with these companies and also how I went about preparing. About Me I have six years of experience working as a Machine learning engineer at Meta. I have been part of two teams at Meta. I was an early ML engineer of a misinformation modeling team working on hoax classification models. After three years at Misinformation, I moved to the Instagram Ads ranking team, where I’m part of the core-optimization team building and improving upon Ads ranking models across all surfaces on Instagram (Feed, Stories, Reels, etc.) How to Crack Machine Learning Interviews at FAANG Companies I’ve been on the job market for the past two months and attended ~10 onsite interviews and have six offers from Google and a few others for Staff ML roles. This was my first job search attempt since graduating with my master's almost six years ago, and I had to learn the landscape of ML interviews and go about strategizing my preparation. In this article, I try to share tips and tricks that could help you prepare for MLE interviews (at L4 and above). I’ve attended interviews at Netflix, Google, Snap, Airbnb, Uber, Instacart, Doordash, and Nextdoor, and I’m going to focus this article based on the structure of these companies. Machine learning interviews are quite different from vanilla software engineering interviews, and the ecosystem is continuously evolving to make the interviews more calibrated and structured. But here are things that you can broadly expect Phone screen: Machine learning technical assessment + Leetcode style coding question Onsite interview : Machine learning theory round Machine learning system design Machine learning coding 1) Machine Learning Technical Assessment Typically big tech would have a one-hour technical phone screen that would comprise of one leet code style question and leave 10-15 mins towards the end for some rapid-fire ML tech questions. The easier end of these ML theory questions is mostly like this: Explain overfitting and regularization Explain bias-variance tradeoff How do you handle data imbalance issues What is gradient descent [Difficult] Can you explain logistic regression and derive gradient descent for Logistic regression [Difficult] What do eigenvalues and eigenvectors mean in PCA I’ve compiled a set of commonly asked ML Theory questions. How Would You Prepare for This Round This round is quite crucial because it really tests your basic understanding of common topics in ML. Instead of approaching to answer these questions by studying a cheat sheet, I’d really recommend spending a week or two going over the basics from a textbook. I highly recommend this textbook and this Coursera course which you can watch at 1.5X speed. Onsite — Machine Learning Theory Round This round is quite similar to the above technical assessment round but has 45 min — one hour dedicated to it. You can expect two kinds of questions. Here are a few examples: Straightforward theory questions What do L1 and L2 regularization mean, and when would you use L1 vs. L2? Can you use both? When there are highly correlated features in your dataset, how would the weights for L1 and L2 end up being? Nuanced derivation-based questions that require a pen and paper Can you use MSE for evaluating your classification problem instead of Cross entropy How does the loss curve for Cross entropy look? What does the “minus” in cross-entropy mean? Explain how Momentum differs from RMS prop optimizer. You can find similar questions here. Aim to spend the bulk of your preparation going back to basics, getting the concepts right. I spend >2 weeks revising machine learning concepts by watching the above videos. Getting the derivations practiced with pen and paper makes a huge difference. Click here for more prep materials. Onsite Interview — How to Tackle the ML System Design Round? Now, this is a round that few companies have managed to conduct well. Like, finding calibrated interviewers for this round and having the right set of rubrics for evaluating candidates for this round is quite challenging. Few companies, like Google, Meta, Airbnb, Doordash, etc., have a mature process for ML System design. Few others were honestly a disaster for me, and that is tempting me to say this round could very well be a hit or miss. For ML Design, the expectation of candidates is often not clear, and I’ve found interviewers give questions that have a broad ground to cover while also interjecting the candidates and transforming the interview into an ML theory round. This is why this round can be a hit or miss, even for the most well-prepared candidates. L4 candidates don’t typically have an ML design round. For L5, you can expect 1-2 rounds, and for L6, there’s a minimum of two rounds expected. Expect questions like: Design a feed recommendation system Design Youtube Design Google contact ranking Design an item replacement recommendation Here Are Top Tips for Nailing This Round Have a good pre-defined structure for the interview. Here’s my recommended structure: Have a good script for answering any ML Design question. Basically, pretty much every ML design question fits into the above structure, and the script can also be somewhat generalized. Here’s my take on how I approach recommendation systems Online machine learning design resources like the course on educative.io are helpful in defining the structure for different types of design questions. How to salvage a derail? Say you are ten minutes into the design interview, and the interviewer asked you a question on Business metrics, and you spent excess time in that section. How do you salvage your interview back? This is something I noticed far too often, especially in ML Design interviews. This is often a function of your interviewer having a pre-defined structure in their mind that collides with your structure. So you start speaking about online metrics, and they want to know about Training data. Take a pause, make it explicit to the interviewer that this is the structure you intend to follow, and get back on track. Design interviews should typically be led by the candidate with minimal interruptions from the interviewer. So, take ownership here fully knowing that the interviewer on the other end is probably not calibrated, and hence it's entirely up to you to utilize your 45 mins to give as much signal as possible. 4. The best way to prepare for ML design rounds are to take as many mock interviews as possible. I took five ML mock interviews with my ex-colleagues which really helped shape my run-book for this round. This brings me to the end of Part 1. In Part 2, I plan to dive deep into types of ML Design questions and the rubric that differentiates an L4 candidate vs. L5 and L6 (meta levels). I also provide free mock interviews for folks who are currently in the job market.
Becoming a good developer requires more than just technical skills. While proficiency in programming languages and frameworks is essential, some habits and practices can help you stand out as a skilled and effective developer. Here are six habits that can make you a good developer: 1. Practice Continuously Technology is constantly evolving, and as a developer, it's crucial to keep up with the latest trends and tools. A good developer should strongly desire to learn and constantly improve their skills. This means staying up-to-date with the latest programming languages, frameworks, and tools through reading blogs, attending conferences, and taking online courses. Continuously learning will help you stay ahead of the curve and be a valuable asset to any team. 2. Embrace Collaboration Collaboration is essential in software development. A good developer should be able to work well with others and understand how to collaborate effectively. This means being open to feedback, actively seeking input from team members, and being willing to work on projects as part of a team. Collaboration leads to better communication, a more efficient workflow, and better products. 3. Write Clean Code Writing clean, well-organized code is essential to becoming a good developer. Clean code is easy to read, maintain, and debug. It also makes it easier for others to understand and work with your code. Good developers follow coding standards, use consistent naming conventions, and write code that is easy to understand and maintain. 4. Use Version Control Version control is a critical tool for developers. It allows you to track changes to your code, collaborate with team members, and roll back changes if necessary. Good developers use version control systems such as Git and GitHub to manage their code and collaborate with others. Version control helps developers keep track of changes, stay organized, and work efficiently. 5. Test Your Code Good developers understand the importance of testing their code. Testing helps catch bugs and ensures that your code works as expected. Good developers write tests for their code and use automated testing tools to save time and ensure accuracy. Testing also helps with maintaining code quality and preventing regressions. 6. Always Keep Learning As technology evolves, so does the world of software development. A good developer should always strive to keep learning, even after mastering a particular language or framework. This means staying up-to-date with the latest developments in the field and learning new technologies as they emerge. A willingness to learn shows that you are open-minded and adaptable, which can help you stay ahead of the competition. Keeping up with new technologies and techniques can help you become a more versatile developer and open up new opportunities for your career. Conclusion In conclusion, becoming a good developer requires more than just technical skills. It involves adopting habits and practices that promote continuous learning, Collaboration, clean code, version control, and testing. These habits help developers stay organized, work efficiently, and produce high-quality code. By adopting these habits, you can become a better developer and a valuable asset to any team.
As a developer, you can level up your skills and knowledge in several ways to become more effective and efficient in your work. This article will discuss the top ten ways to level up as a developer. 1. Learn a New Programming Language Learning a new programming language can be challenging, but it can also be rewarding. It can expand your skill set and give you a better understanding of different coding paradigms. Moreover, it can help you choose the right tool for the job. 2. Take on Challenging Projects Taking on challenging projects can help you develop new skills and improve your problem-solving abilities. Try to take on projects that are slightly above your current skill level and work on them until you achieve success. 3. Contribute to Open-Source Projects Contributing to open-source projects can help you learn new technologies and methodologies. It can also help you build a network of contacts in the developer community. Start by finding an open-source project that interests you and contribute by fixing bugs, writing code, or creating documentation. 4. Attend Conferences and Meetups Attending conferences and meetups can help you stay up-to-date with the latest trends and technologies in the industry. It can also give you the opportunity to meet other developers and share ideas. 5. Participate in Hackathons Participating in hackathons can help you build your skills and challenge yourself to create new solutions. It can also be a great opportunity to meet other developers and potential employers. 6. Read Books and Blogs Reading books and blogs can help you stay up-to-date with the latest trends and technologies in the industry. It can also help you deepen your understanding of specific topics and improve your problem-solving skills. 7. Take Online Courses Taking online courses can help you learn new skills and technologies on your own time. There are many online platforms that offer high-quality courses, such as Udemy, Coursera, and edX. 8. Work on Personal Projects Working on personal projects can help you practice new skills and experiment with new technologies. It can also be a great way to showcase your work to potential employers. 9. Get Involved in Online Communities Getting involved in online communities can help you learn from other developers and share your own knowledge and experiences. Join developer forums, subreddits, and social media groups to connect with other developers. 10. Practice, Practice, Practice Finally, practice is the most important way to level up as a developer. The more you code, the better you will become. Try to set aside time each day to work on coding challenges or personal projects, and aim to continually improve your skills and knowledge. Conclusion To summarize, there are several ways to level up as a developer, including learning new programming languages, taking on challenging projects, contributing to open-source projects, attending conferences and meetups, participating in hackathons, reading books and blogs, taking online courses, working on personal projects, getting involved in online communities, and practicing consistently. Each of these strategies can help you improve your skills, expand your knowledge, and stay up-to-date with the latest trends and technologies in the industry. By incorporating some or all of these approaches into your routine, you can continually improve your abilities as a developer and achieve greater success in your career.
Learning Adaptability A few weeks ago, my laptop crashed during a meeting. It was painful as I was about to start on an exciting new feature that my Product Owner (PO) had just proposed. I immediately rushed to the IT department for assistance, and they informed me that they needed to take a backup and completely rebuild my laptop. They estimated that rebuilding would take slightly over a half day to complete. Feeling frustrated, I asked myself: “Can I code without my laptop?” In the past, I would have answered, "NO," without hesitation. But on second thought, I realized that I know my system well and am also familiar with the domain. After more introspection, I recognized that I was already doing it without consciously realizing it. So, I went to my PO and requested him to print the new requirements for me. From Requirements to Success Criteria There are numerous factors that a software engineer must consider before writing even a single line of code. First and foremost is understanding the business problem and who the actors are. Once you have a clear understanding of the requirements, it enables you to identify any flaws in the requirements or if it contradicts any existing features. You can then break it down into manageable pieces and think about how to reuse those pieces or determine if something already exists. This process helps you to define the final success criteria. Strategies and Considerations Once you understand the problem landscape, the next step is to start thinking about solutions and strategies. Consider whether the operation will be compute-intensive or data-intensive. Can you offload any work to the client to reduce the server load? Are there any successful known solutions, patterns, or techniques that can be utilized? Should the results be cached, and if so, where? Additionally, consider breaking down the feature and delegating work to other team members to work in parallel. In addition to the technical considerations, it’s crucial to consider the nature of the application you’re developing. Is it a web application or an API? You must also consider who will consume the service - web clients, iOS, Android, B2B, and B2C clients. Additionally, you need to focus on contracts and communication channels, both of which are crucial components. Beyond Development Have we discussed security yet? Are you planning to place this new feature behind already available authentication flows and firewalls? Have you considered data in transit and data at rest? Are there any alerting mechanisms in place in case anything goes wrong? So far, everything looks perfect. You know the problem, the strategy to develop the solution, the consuming client, deployment, and security. Once the feature is ready, it will deploy to production. However, have you considered what happens when it’s in production? Do you need any configuration changes? Are there any potential obstacles to scaling the application? How will you address any performance issues that arise in production? Is there a prebuilt dashboard for reporting the critical metrics of the new feature? Producing Robust and Maintainable Code Ahh, we have listed almost everything, and now it’s time to start writing code. But, before you begin, you should consider the testability and maintainability of your code. You first think about your test before the code. Test Driven Development (TDD) should guide your development process to build a robust feature. This technique can help you solve problems more effectively and efficiently. Now that you have completed the necessary groundwork, it’s time to translate your well-thought-out heuristic into code using your preferred programming language and claim the story points. Journey To Deliver High-Quality Junior developers may not have developed the ability to think that comprehensively yet, while seasoned software engineers know what it takes to deliver a component. And as you progress to be a tech lead, you will perform similar tasks, but for many components, simultaneously. Although it may seem like a lot of hard work, once you start doing it, it will become more intuitive. The only tedious part of this entire process is actually typing the code and committing it, for which I need my laptop.
Data engineering is the practice of managing large amounts of data efficiently, from storing and processing to analyzing and visualizing. Therefore, data engineers must be well-versed in data structures and algorithms that can help them manage and manipulate data efficiently. This article will explore some of the most important data structures and algorithms that data engineers should be familiar with, including their uses and advantages. Data Structures Relational Databases Relational databases are one of the most common data structures used by data engineers. A relational database consists of a set of tables with defined relationships between them. These tables are used to store structured data, such as customer information, sales data, and product inventory. Relational databases are typically used in transactional systems like e-commerce platforms or banking applications. They are highly scalable, provide data consistency and reliability, and support complex queries. NoSQL Databases NoSQL databases are a type of non-relational database used to store and manage unstructured or semi-structured data. Unlike relational databases, NoSQL databases do not use tables or relationships. Instead, they store data using documents, graphs, or key-value pairs. NoSQL databases are highly scalable and flexible, making them ideal for handling large volumes of unstructured data, such as social media feeds, sensor data, or log files. They are also highly resilient to failures, provide high performance, and are easy to maintain. Data Warehouses Data warehouses are specialized databases designed for storing and processing large amounts of data from multiple sources. Data warehouses are typically used for data analytics and reporting and can help streamline and optimize data processing workflows. Data warehouses are highly scalable, support complex queries, and perform well. They are also highly reliable and support data consolidation and normalization. Distributed File Systems Distributed file systems such as Hadoop Distributed File System (HDFS) are used to store and manage large volumes of data across multiple machines. In addition, these highly scalable file systems provide fault tolerance and support batch processing. Distributed file systems are used to store and process large volumes of unstructured data, such as log files or sensor data. They are also highly resilient to failures and support parallel processing, making them ideal for big data processing. Message Queues Message queues are used to manage the data flow between different components of a data processing pipeline. They help to decouple different parts of the system, improve scalability and fault tolerance, and support asynchronous communication. Message queues are used to implement distributed systems, such as microservices or event-driven architectures. They are highly scalable, support high throughput, and provide resilience to system failures. Algorithms Sorting Algorithms Sorting algorithms are used to arrange data in a specific order. Sorting is an essential operation in data engineering as it can significantly improve the performance of various operations such as search, merge, and join. Sorting algorithms can be classified into two categories: comparison-based sorting algorithms and non-comparison-based sorting algorithms. Comparison-based sorting algorithms such as bubble sort, insertion sort, quicksort, and mergesort compare elements in the data to determine the order. These algorithms have a time complexity of O(n log n) in the average case and O(n^2) in the worst case. Non-comparison-based sorting algorithms such as counting sort, radix sort, and bucket sort do not compare elements to determine the order. As a result, these algorithms have a time complexity of O(n) in the average case and worst case. Sorting algorithms are used in various data engineerings tasks, such as data preprocessing, data cleaning, and data analysis. Searching Algorithms Searching algorithms are used to find specific elements in a dataset. Searching algorithms are essential in data engineering as they enable efficient retrieval of data from large datasets. Searching algorithms can be classified into two categories: linear search and binary search. Linear search is a simple algorithm that checks each element in a dataset until the target element is found. Linear search has a time complexity of O(n) in the worst case. Binary search is a more efficient algorithm that works on sorted datasets. Binary search divides the dataset in half at each step and compares the middle element to the target element. Binary search has a time complexity of O(log n) in the worst case. Searching algorithms are used in various data engineerings tasks such as data retrieval, data querying, and data analysis. Hashing Algorithms Hashing algorithms are used to map data of arbitrary size to fixed-size values. Hashing algorithms are essential in data engineering as they enable efficient data storage and retrieval. Hashing algorithms can be classified into two categories: cryptographic hashing and non-cryptographic hashing. Cryptographic hashing algorithms such as SHA-256 and MD5 are used for secure data storage and transmission. These algorithms produce a fixed-size hash value that is unique to the input data. Therefore, the hash value cannot be reversed to obtain the original input data. Non-cryptographic hashing algorithms such as MurmurHash and CityHash are used for efficient data storage and retrieval. These algorithms produce a fixed-size hash value that is based on the input data. The hash value can be used to quickly search for the input data in a large dataset. Hashing algorithms are used in various data engineerings tasks such as data storage, data retrieval, and data analysis. Graph Algorithms Graph algorithms are used to analyze data that can be represented as a graph. Graphs are used to represent relationships between data elements such as social networks, web pages, and molecules. Graph algorithms can be classified into two categories: traversal algorithms and pathfinding algorithms. Traversal algorithms such as breadth-first search (BFS) and depth-first search (DFS) are used to visit all the nodes in a graph. Traversal algorithms can be used to find connected components, detect cycles, and perform topological sorting. Pathfinding algorithms such as Dijkstra's algorithm and A* algorithm are used to find the shortest path between two nodes in a graph. For example, pathfinding algorithms can be used to find the shortest path in a road network, find the optimal route for a delivery truck, and find the most efficient path for a robot. Data structures and algorithms are essential tools for data engineers, enabling them to build scalable, efficient, and optimized solutions for managing and processing large datasets.
Have you ever been so dramatic in describing your dream job? Earnestly talking about it so that everyone around knows before you say it. For example, "Oh, I am interested in the tech industry," "I would like to give Software Developer a shot," or "Coding is not my thing; I should enroll for the Software Engineer position instead." Well, it's no doubt that everyone has a dream job, whether a 9-5 or a work-at-home kind of job. There's always this picture of the company you would want to work with, how your office would look like, or even the imagination of working with intellectual teammates. While some people will have dreams of owning their own company and being a boss of their own. Nevertheless, it is important to note that before applying for a job or securing one, you must have something to offer regarding your skills and whatnot. This is because having something to offer always comes with something in return, a paycheck. There is more to getting a job than being vocal about it or being a dreamer. Yet, that imagination is an edge that shows whatever you are dreaming about is most likely what you are passionate about. However, there are different requirements needed for the application of a tech job and a technical job. Apart from this, you want to ensure that you are going into an industry that is promising and filled with opportunities for you and your growth. Here in this article, the six fundamental components that you are required to have in the process of securing a tech job, Software Developer, will be discussed. On this note, let's check out those necessary but not compulsory components needed to secure a job. 1. Knowledge of the Job It is quite important to know the job position you are applying for. Unfortunately, a lot of individuals do not research the job description and what is required from them. For instance, if you are applying for a Software Developer position in a company. You should be able to know the functions of a Software Developer in terms of designing, building, and implementing application packages and managing a computer system as well as application software, for the functionality of users. Also, you should be able to answer the following questions as your employer would believe you are aware of the requirements for the job position. They include; Do you have coding expertise? Do you have the ability to pay attention to details, no matter how little? Can you work with a team? How effective are your problem-solving skills? 2. Education Do you know that you don't need a degree for all tech jobs? Oh yes! You can successfully dive into the tech industry without a degree in some particular tech career, like user interface and user experience design, technical writing, data science, product management, etc. However, when it comes to Software Development or being a Software Developer, you must have a degree in Computer science or any related field. Apart from this, you must have gone through several professional certifications, as this would be an added advantage in getting employed alongside your experience. 3. Resume So you do not see the need for a resume? Well, you do need a resume for your job application. A resume is very important in your job search or job application for the software developer role, even though it might be a page or two. It helps you to be precise in your pitch to the employer or company that wants to hire you. One of the most frequently asked questions about the resume is whether to attach a profile picture or not. According to searches on Google, attaching a profile picture to your resume is acceptable in some countries and not acceptable in others. Likewise, in some industries, it could be encouraged, and it might not in some. For example, the fashion or art industry might not necessarily frown at the addition of a profile picture to a resume, because it is an added advantage to the role you are applying for, whether it be a modeling role or a related field. Nonetheless, when it comes to some industries that deal with professionals, such as technology, business, and the like, it is not advisable to attach your profile picture to your resume. The following are pieces of information that your resume should contain if you want to secure a job as a Software Developer; Header and Contact Information Career Objective Work Experience Education Skills (technical and soft skills) and Certification. Additional Relevant Information (volunteer work, hobbies, projects, and so on). Furthermore, ensure that the appropriate information is added to the above-listed subheadings in your resume. 4. Build a Portfolio A portfolio is a collection of your work or project that shows your skills and what you are capable of doing. If you have a portfolio, you can add the link to your resume. Basically, this will serve as extra information about your work and experience; thus, your employer or interviewer can see more detailed information about your expertise and even a profile picture. This, in turn proves your credibility. Note that, unlike the resume, a profile picture serves as a good impression maker. It helps your portfolio to be more personal, so it should be taken in a natural environment, in a welcoming stance. Other works and projects should be added to your portfolio, whether they can be practice projects or projects done for a client. It explains more about what you are capable of doing. 5. Online Presence Nowadays, having a good online presence is just as important as having a properly written resume, before embarking on securing a job, especially a tech job. You see, most companies ask for links to your social media handle during the first stage of the interview. This is to know how credible the information you've given to your employer is. In essence, your online presence is a digital footprint of your life, so whether it be LinkedIn, Facebook, Twitter, or Instagram, have a good profile that is targeted towards what you do, projects you've done for clients, how you did such projects, and the likes. When it is looked at, it will help to increase the decision-making of your employer. 6. Expand Network You have to join industry-specific groups where you get direct access to professionals, conferences, events, and mentorship. You must belong to a community of like-minded people that do what you do or what you aspire to do. In other words, through your network, you can get so many benefits as a techie. First, there is the advantage of getting information about the latest job update from top companies in the industry. Also, the top guys in your network can help vet your work, project, and even your resume in terms of what the hiring manager would look towards. In Conclusion Additionally, you must follow these fundamental components if you want to secure a job as a software developer. Although higher education is not essential for other tech careers, it is a prerequisite for securing a job in the Software Development industry, if you want to be given your dream job of supervising teams of developers or getting other job opportunities. Apart from these, soft skills and hard skills are a must-have as well, and these are the information you should include in your resume.
With hands-on experience in AWS DevOps and Google SRE, I’d like to offer my insights on the comparison of these two systems. Both have proven to be effective in delivering scalable and reliable services for cloud providers. However, improper management can result in non-functional teams and organizations. In this article, I’ll give a brief overview of AWS DevOps and Google SRE, examine when they work best, delve into potential pitfalls to avoid, and provide tips for maximizing the benefits of each. DevOps DevOps is a widely used term with multiple interpretations. In this article, I’ll focus on AWS DevOps, which, according to the AWS blog, merges development and operations teams into a single unit. Under this model, engineers work across the entire application lifecycle, from development to deployment to operations. They possess a wide range of skills rather than being limited to a specific function. As a result, the same engineers who write the code are responsible for running the service, monitoring it, and responding to incidents. In practice, every team may have its own approach, but there is some degree of unification of practices, such as with CI/CD, incident prevention, and blameless post-mortems. Personally, I consider AWS to have the most effective operational culture among all the organizations I’ve worked with. Advantages of the DevOps Approach When DevOps is implemented effectively, it can provide several benefits, especially in the early stages of development. For start-ups looking to bring a new product to market quickly, DevOps can offer speed and agility. Similarly, established companies launching a new service or product can also benefit from the DevOps model. Although the same team operates the system, there may be some specialization, with some team members focusing more on operations and others on development. Over time, as the product matures, teams may split, with a platform team (akin to SRE) working alongside a development team (akin to SWE). However, the integration and overlap of operational activities by the development engineers and deep understanding of the system by the operational engineers remain tight. This tight feedback loop leads to a better understanding of how the system runs, its limitations, and the customer experience by all team members. This, in turn, makes decision-making and iteration cycles faster. This is likely a contributing factor to AWS’ dominance in the market and the large number of offerings it provides. When DevOps Goes Wrong Generally, operations can be divided into three main categories: Service operations Incident prevention Incident response While service operations are often seen as enjoyable by software engineers, incident prevention may not be as engaging, and incident response can become overwhelming, particularly when engineers are responsible for development and operations. The more time they spend on operational tasks, the less time they have for development and the more dissatisfied they become with their job. This can result in a vicious cycle of overworked engineers, high turnover, decreased work quality, and a growing workload for operations. Site Reliability Engineering (SRE) Site Reliability Engineering (SRE) is a discipline developed by Google to improve the reliability and availability of software systems. It involves a dedicated team of SREs who focus solely on these goals, while software engineers (SWEs) handle writing the code. SRE brings a formalized set of principles and terminology, such as Service Level Indicators (SLIs), Service Level Objectives (SLOs), error budgets, toil, and others, to ensure the software is scalable and meets performance standards. Benefits of Site Reliability Engineering When SRE is implemented effectively, it provides a high level of standardization and consistency in measuring customer experience. This approach doesn’t necessarily result in more reliable or performant services, but it ensures that best practices are followed across multiple products. By having dedicated SRE teams, it reduces the burden of operations on the software engineers, who no longer need to deal with operational issues at all hours of the day and night. As a result, software engineers can have a better work-life balance, while the SRE team ensures that operational needs are met in a consistent and efficient manner. When SRE Goes Wrong In the SRE model, software engineers (SWEs) are freed from the operational burden; however, this can result in a lack of exposure to the workings of the system, leading to vague risk assessments and limited understanding of how their code behaves in different conditions. On the other hand, SREs may be overburdened with an excessive number of pages, which can slow down development by becoming overly risk-averse. This, in turn, affects the SWEs who then become risk-averse and struggle to get approvals from SREs. This disconnect between the two teams, with SWEs perceiving the service as a black box and SREs lacking an understanding of the code and intent, can lead to a semi-functioning organization where deploying code to production may take months and the majority of initiatives never see the light of day. Which One Is Better? The answer is not that simple. Neither DevOps nor SRE is inherently better or worse, they both have their own strengths and weaknesses. When it comes to DevOps, it’s crucial to ensure that engineers are not overburdened with operational tasks, and that they have a healthy work-life balance. This can be achieved by proper investment in tooling and a focus on quality output. Additionally, it’s important to strike a balance between development and operations to avoid a situation where either one of the two becomes more dominant and hinders the progress of the other. On the other hand, SRE is designed to alleviate the operational burden from software engineers and protect them from the distractions of incident management and other operational tasks. However, it’s important to avoid a disconnect between the SWEs and SREs and ensure that each team has a comprehensive understanding of the system. Additionally, SREs should not only be focused on operational metrics, but also be interested in delivery and should have skin in the game. In other words, both DevOps and SRE have their own advantages and disadvantages, and the best approach will depend on the needs and culture of your organization. The key is to avoid the pitfalls of each system and strive for a balanced and effective approach to software delivery. Balancing Speed and Stability Balancing speed and stability is a critical aspect in the DevOps vs SRE debate. The approach that a company takes will depend on its stage and goals. Start-ups often prioritize speed and agility to bring their product to market quickly, making DevOps the ideal choice. As the company grows, stability and reliability become more important to maintain customer trust, making SRE a better fit. However, the transition from DevOps to SRE does not mean giving up on the principles of speed and agility. An effective SRE model can still strike a balance between reliability and speed by ensuring close collaboration between SWEs and SREs. The SWEs drive the development process, while the SREs ensure the system is reliable and scalable. Regular hat-swapping rotations and joint operational meetings can keep both teams tight-knit and aligned with delivery and stability goals. This approach offers the best of both worlds solution. Closing Thoughts The choice between DevOps and SRE is not straightforward. The best approach depends on the situation of your company and what it needs. By combining the advantages of both, you can find the sweet spot between speed and stability, ensuring that you keep delivering great software. To make this possible, it’s vital for technology and operations engineers to collaborate closely. Sharing responsibilities and meeting regularly can help keep everyone on the same page, with a focus on delivery and maintaining smooth operations. This can result in both DevOps and SRE working effectively.
People often ask me for advice when they move to a manager of managers role. This post covers ten things to consider. I’ll describe a number of things that surprised me, some skills to focus on building, and some tips for navigating this phase of your career. Being a Director Is a Very Different Job First of all, the move to being a director was a bigger change for me than I expected. I thought managing managers would be similar to managing engineers. That was naive. The shift wasn’t quite as big as moving into management. But it was close. Being a Half Director Isn’t the Preparation You May Think It Is As a senior manager, I started to transition into a manager of managers role. But I did so in a hybrid way: managing a team directly, and managing another manager at the same time. I thought this meant that I understood the job of managing another manager. I did learn a lot, but it wasn’t the preparation I thought it would be. Why? The skills to manage that manager was new, so I did the job in a limited way. Only when my role switched to fully managing other managers did I have enough ability to focus on the job? It was then that I realized how little I actually knew about that work, and started to grow at a faster pace. You’ll Do Most of Your Work Through Others One of the larger shifts in the nature of your work is that Directors do most of their work through other people. You may think you’re doing work through other people when you’re managing engineers as a front-line manager. But Directors have to operate at a much higher level of indirection. A consequence of this is that your weekly meeting with your managers, and your 1-1s with them, become the most important meetings of your week. Consider lengthening your 1-1s with them to an hour, and make them weekly. And spend serious time planning your management meetings and 1-1s. They are where you should be doing most of your work. Operating with so much indirection can be an adjustment. Most successful managers have probably been successful largely through their direct efforts. They’ve managed projects well, or hired well, or made improvements to their team. When you’re a Director, you’re usually working through someone else who is doing the work. Suddenly your success is based on how well your managers are running their projects. Your success is based on how well they hire. Your success is based on the improvements they make on your team. This leads to a few common pitfalls. One is the overinvolved Director, who doesn’t make space for their managers to do the work themselves. One sign this is happening is if you’re in all the same meetings as your manager. The second is the involved Director, who views their role as hiring the right people and supporting them. This is similar to the shit shield school of management. Instead, I encourage you to think about your level of involvement as something you flex depending on the circumstances. Your goal is to be less involved, but it should depend on the level of expertise of the manager in this particular area, and the complexity and challenge of the situation they’re facing. When a situation is challenging for a manager, you might be more proscriptive, giving them a pattern to follow. You might review their plans and offer more feedback. You should interact more frequently, and talk through the actions they plan to take. A Lot of Your Job Is Training Managers This flexing of your level of attention is an important part of your role as Director. And it leads to the next thing to be aware of as a Director: your role is to train your management team. Ideally, any of your managers should be able to step into your shoes, and do any part of your role. And even if they can’t do so, your job is to prepare at least one of them to do so. To understand this topic, I first recommend you read my post on Completed Staff Work. Pay special attention to the end, where I review Marquet’s Ladder of Leadership. The way I like to look at my management team is that they all have varying levels of skills in different areas. Sometimes their skills will exceed my own in certain areas! But my role is to help them develop their skills as rapidly as possible. Part of this is that the more skilled they are, the more autonomously they can operate. This is at the heart of a scalable organization. If all your managers rely on you for everything, you have an ineffective organization. So your job is to create an increasingly autonomous and skilled organization. One that is able to produce good results independently. To do this, you need to be expanding their skill set, and creating the right environment for them to thrive. Coach and develop them to build their skills. Biggest Skill to Learn: Sensing Your Organization The biggest surprise for me when I moved to a pure manager of managers role was how little I knew what was going on. It was like someone had turned off all the lights. I couldn’t see anything that was happening any more. You may find the information vacuum unsettling. You’re simultaneously put in a position where your job is to make things better, but you have much worse information about where the problems are. I see some Directors become destructive to their organizations at this point. They rely on their gut and pride themselves on making decisions without full information. This can work sometimes, but it can also result in problems. It’s like a doctor that doesn’t diagnose the disease and instead starts filling you with random drugs and starts surgery in random parts of your body. Correctly diagnosing and understanding the cause of things is essential. You need to build a way to understand what is happening in your organization. You need to set up observability of your organization, so you’ll know if things are going off the rails. Pay a lot of attention to this. It gives you the ability to support your managers, and it provides opportunities for intervention. A few things you might try: Look for meetings that give you signals that things are going well, or not going well. I found demos to be a particularly rich source of information, for example. Do skip levels 1-1s, to get a random sense of how things are going, and to establish connections throughout your organization. Collect metrics from your managers, so you can have conversations about trends or things that seem to be going off track. Look at the information tools can give you. Stats on reliability, how often people are paged, product usage metrics and analytics tools can help fill in your picture of how things are going. One trap to be wary of is that your need for information may entice you to ask your managers for information. You’ll probably need information frequently enough that you can be a source of annoyance to them. Consider adding some structure around your information needs. Think about what you really need to know each week, and ask your managers to push it to you, instead of pulling it from them all the time. You’ll Need a New Perspective One question to ask yourself is where you can be helpful to the organization. What are things you can do that nobody else can do? One thing you do more as a Director is to plan further into the future. It would be best if you had a higher-level perspective on how your organization’s work fits into the broader offering of the company. This perspective is something you can use to shape the direction your organization heads and is something your managers cannot usually do. The skill to learn here is outlined in my post: Leaders make their own problems. I recommend looking at that post carefully. You can also look at this post on upstream thinking, as I think it outlines some of the mindset required as a Director. You Should Focus On Systems A weird thing about being a Director is that you operate more at a meta-level. What I mean by that is that instead of directly tinkering with a team, you’re working with a system of teams. Your focus should be shifting to be more about the patterns of things, than the details themselves. This may come naturally to the rare people who tend to be systems thinkers. For everyone else, this is a skill to build. My suggestion is to always be operating at two levels: solving both the immediate problem and looking at the level of abstraction above that. For example, if there is a project that is going off the rails, you should be thinking about how to help with that. But you should also think about what your playbook is for off-the-rails projects. Or how to notice these projects earlier. Or how to systematically reduce the prevalence of this type of project. You also should think about ways you can influence the whole system. Your toolkit is different because you’re operating at a systems level – at an organizational level. A few suggestions: You are in a unique position to offer clarity. You can simplify things for people. You can allow them to focus on fewer things. This is almost always a helpful thing for you to be doing, so pay attention to how you can both simplify things in your own mind, but also how to communicate them. You’re also in a unique position to offer context. You will have a lot more context than you used to because you’ll be interacting with higher levels of leadership than you did in the past. Think of that context sharing as a service you offer your organization. \ Constraints are a tool that you may wield more as a Director. For example, you can make simple rules for teams that help nudge them in the right direction. An example? Teams can only have a project or two they work on at a time. Don’t use over-use constraints as a tool, but sometimes it can be helpful to ask yourself: if I could only do one thing right now, what would have the biggest impact? You should also familiarize yourself with the levers of coordination models. These are patterns in the way that humans work together in groups to be effective. You’ll need to learn how to organize groups of people, do reorganizations, and so on. Some of your instincts may be untrustworthy. For example, when deciding whether to organize a team based on a skillset or around a product area, you may have suspicions about the best way to do it. But most likely, you have no idea the kinds of tradeoffs you’re dealing with. This leads to my next point. Get Support and Mentorship Many managers gradually reduce the amount of support and mentorship they receive as they go up the hierarchy. I think they do this because they’re expected to be experts. This is foolish. As you change roles and move through different parts of the organization, your skills will need to grow. So seek out people who can mentor you. Seek out peers that can give you feedback. Start your own Mini-M support group for Directors. Contact me or another experienced leader to advise or coach you. Read books and subscribe to newsletters that stretch your thinking. Beware the Distortions of Power Another thing you need to be aware of is that the higher you go in an organization, the more there is an invisible distortion field around you. It affects how people interact with you, and the information you see from your environment. This can have a harmful impact on your ability to understand the true situation in your organization. It requires a specific set of skills to counter. Without doing so, you’ll be operating in lala land, unaware of the problems you’re creating. As a Director, you’re going to start getting the first taste of this, so be on the lookout and start building your habits early. You’re Judged by the Difference You Make in Your Organization To close, I’d like to leave you with my mental model for how you can assess yourself as a Director. You are judged by the output of your organization. And specifically, you’re judged by the difference you make in the organization. What do you make better? How do you improve things? What is the diff you apply to that organization?
Author, Researcher, Speaker, Director, DevOps Enthusiast,
VP of Engineering,
Jade Rubick Consulting LLC