Undoubtedly, you were put in a position where constructive criticism was needed of you. And I bet, in your perspective, it meant “negative, negative, negative.” If you are a people-pleaser, then worry and cold sweat will set in, and you will be wondering how you will get through this. Why are you hesitant to criticize bad behavior or performance? You worry about the recipient’s response: What if they become angry? What if this results in disagreement and a strained relationship? What if I demotivate them and it negatively impacts their performance or self-esteem? What if they only consider my negative comments? What if they will hate me as a result? What if I am unable to effectively convey my message? Let me tell you, if you are worrying about it, that already helps you be very empathetic while delivering the feedback. Step 1, checked! In this article, we should look at “constructive criticism” through the golden circle model of “What, Why, How,” and we will explore why you do not need to resort to negative criticism when providing much-needed feedback. What is constructive criticism? We have a preconceived interpretation that constructive criticism is negative feedback, and the confusion could stand in the name, perceiving the word “criticism” as a negative term. Constructive criticism won’t always be positive, but the underlying intent is to help someone improve and grow. While constructive criticism offers improvement suggestions and possible action items, destructive criticism is a type of criticism that is intended to undermine, affecting the receiver’s self-esteem, and could be perceived as a form of attack. The feedback receiver should leave the conversation with a sense of confidence and positivity instead of shame, anger, and resentment. Types of criticism Constructive criticism : providing feedback that is helpful and supportive, offering suggestions for improvement, focusing on growth and positive change; Destructive criticism : communicated with negative, destructive, and demoralizing language, it does not offer solutions but merely points out the issues; Positive criticism : it highlights an individual’s strengths and accomplishments; Negative criticism : focuses on the flaws and mistakes of an individual and often lacks suggestions for improvement. Negative criticism and destructive criticism both focus on providing feedback that highlights weaknesses. The difference between the two is that negative criticism leaves room for positives, although predominantly negative, and is sometimes accompanied by suggestions for improvement. The intention behind negative criticism is productive change without attacking their confidence. Destructive criticism is more harmful than negative criticism, the feedback is provided in a hostile, demeaning manner, and it can involve negative language, personal attacks, and insults. The intent behind this is to discourage and hurt, which could lead to serious mental well-being issues for the receiver. Positive and constructive criticism have things in common. Positive criticism focuses on strengths and accomplishments and is a morale booster, encouraging positive behaviors and maintaining positive attitudes. Constructive criticism focuses on both positive and negative aspects of an individual’s performance while also encouraging growth and aiming to identify areas of improvement. Constructive criticism earns the spot for the most balanced approach. Real-life examples Positive:“Your positive attitude is very appreciated; it contributes to the team’s positive environment!” Negative:“Your suggestions for improvement are well-received, but it does not help that you missed the retrospective meetings” Destructive:“Your work was done so poorly. Clearly, you do not care for quality” Constructive:“I noticed that your knowledge-sharing session was clearly structured, and it shows that you paid attention when creating it. I believe that for the future session, having small interactive exercises will increase the engagement even further!” Why is constructive criticism important? Professionals who embrace constructive feedback are more likely to advance in their professional endeavors because they have a continuous improvement mindset that will push them forward. How do you actually help someone by giving constructive criticism? Growth and performance: The receiver will gain insights into their actions or work, and they will be able to identify areas of improvement. Perhaps they were not even aware of the things they’re missing, and you have spared them some time it would have taken for them to figure it out on their own. You will increase the chances that the person will not continue to follow unproductive patterns, thus, making informed decisions focusing on improving their weaknesses and increasing their performance. Furthermore, it plays a highly important role in the quality of their deliverables. Communication and relationships: You can not have constructive criticism without clear communication. You will need to express your communication skills through open dialogue, active listening, and idea sharing. By offering constructive criticism instead of ignoring the issues and only discussing positive traits, you will, in fact, restrict your communication, causing frustration on your side and avoiding problem-solving. When you give constructive criticism, you foster a transparent, stronger, and more trusting relationship. When you offer them your own perspective, you can then collaborate to find the most inspired solutions. And when conflict is in play, by offering constructive criticism, you can address the issues in a healthy manner, leading to improvement. How should I give constructive criticism? The goal of constructive criticism is to help an individual grow and not to criticize, although it is in the name. Ideal feedback is defined by 3 characteristics: regular, not sporadic specific, not ambiguous constructive, not destructive The constructive criticism should be: Timed: Avoid communicating the feedback when you or the other person are not in the right place of mind, stressed, or emotionally unavailable. Instead, plan it when you can both be as rational as possible Private: Avoid communicating your feedback in public,; do it in a 1×1 conversation Clear: Be very specific about the point you are addressing. Do not make it personal. You are addressing an action, not their person. Make your whole case about the facts. Do not use generalizations, as you will only make your point unclear Non-emotional: Stick to your observations and be descriptive and objective, not emotional and subjective in your approach. If you are making personal attacks, you will not help the situation Suggestive: Offer solutions
There is a top soft skill that has helped me navigate my professional career in software development. I quickly realized that this ability not only aids me in developing and supporting great professional relationships, but if it is applied and cultivated at the team level, it has vast benefits. Extrapolating from the team to the organizational culture, this particular trait brings with it the inception of a healthy and, at the same time, productive culture. This skill is known as “empathy”. What is empathy? In short, empathy is defined as the understanding of another person’s thoughts and emotions in a particular situation. Interestingly, if we search the definition of the adjective “understanding,” we will find the following result: sympathetically aware of other people’s feelings: tolerant and forgiving. “People expect their doctor to be understanding.” synonyms: compassionate, sympathetic, sensitive, considerate, tender, kind, kindly, kind hearted, thoughtful, tolerant, patient, forbearing, lenient, merciful, forgiving, humane, human, good-natured, approachable, supportive, reassuring, tactful, diplomatic, perceptive, subtle, prudent However, what is essential is that empathy differs from sympathy. In contrast to empathy, sympathy is when you are moved by the thoughts and feelings of another person but remain at an emotional distance. There are three types of empathy: Emotional: When you have a feeling because someone else does. For example, crying while watching a dramatic movie scene. Cognitive: When you put yourself in someone else’s shoes. Compassionate: When you see someone in need, you are taking action by offering your help. Benefits of empathy in the workplace The benefits of empathy in the workplace translate into different relationship dynamics. Starting with the relationship between the team members and the manager in relation to the team, interactions with a client, and ending with the executives towards the company employees dynamic. Effective Communication: Empathy encourages honest communication, active listening, exposing ideas or concerns, and using feedback as a tool, all of which lead to fruitful communication. Close Collaboration: When professionals understand each other’s feelings and perspectives, a supportive environment is created where they can work together more cooperatively. Empathy shapes professional relationships and helps manage conflicts. The misunderstandings are greatly reduced, and a flow of collaboration begins to occur. Finding Solutions: Encouraging others to share their insights can lead to faster mitigations, as one can discover the source of the problem or its different facets. Moreover, enforcing open communication and facing issues together eliminates the risk of concealed issues. Growing Motivation : It is human nature to react positively to appreciation, understanding, and support. When we receive words of encouragement, praise, or other forms of appreciation, we tend to open up, feel safe, and become more proactive in our day-to-day responsibilities and interactions. Improved Retention: Given that the highest-ranking form of marketing is still person-to-person promotion, when employees express their appreciation for the company they are working for, the company’s market image certainly gains a boost. When we apply the magic of empathy in our client relationships, we gain client loyalty and recommendations. Cultivating Leadership: Empathy is the basis for becoming a leader and helps intuitively understand how to best serve the role. A leader’s understanding of how they can help employees and create an environment they can shine in is key to a successful team dynamic, which, of course, leads to higher productivity, quality deliverables, and strong interpersonal connection. Displays of empathy Having regular check-ins It is of significant importance to have a pulse of what is going on with the ones around us. Maintaining regular communication in place will keep us engaged and up-to-date. Example for the team: The daily scrum meeting is essentially a check-in; it keeps everybody updated on progress, but it is also a time for communicating issues and blockers and finding the best solutions together. Example for the leader: The daily team syncs, the 1 × 1 meetings with the team members, an update sync with a client, and a feedback session are valid examples of checking in. Teamwork in decision-making A well-taken decision is insightful. Discussing the perspectives of those around us will give us a fuller picture of how a change could impact the environment or project. On top of that, a great “side-effect” is that people feel valued when their opinions are taken into consideration. Example for the team: Brainstorming an implementation solution with a colleague, giving your insight to the project manager, or voicing your opinion are ways of being involved in decision-making. Example for the leader: When having to make a decision that will greatly impact the employees, you will have to consider the well-being of all involved parties. Whether the change is at an organizational level or a project-related change, shifts occur constantly, and as part of change management, taking other people’s input into account will eventually lead to an informed decision. Being open to others’ perspectives and not considering only your unconsciously biased opinion will increase the well-being of everyone involved. Teamwork in decision-making will provide the necessary platform to offer reassurance and manage any concerns that might occur along the way. Nurturing support It is crucial to remind ourselves that every individual has unique needs, a life outside of work, and personal struggles. We should also consider that none of us can be at a 100% productivity level 100% of the time. We can be affected by personal problems, health issues, a decrease in motivation levels, or even the weather. Example for the team: Having a support system is essential. Receiving a “leg-up” at the right time can make a difference, and it can be an opportunity for a collegial bond to be created or reinforced. Keeping in mind that a person will not always communicate when they are tired or overwhelmed, it is our ethical responsibility to check each other. Example for the leader: A great leader constantly pays attention to employees’ well-being. Well-being includes work-life balance, a mindfully calibrated workload, and attention to personal needs. When a person has a rough time, it is perfect to demonstrate empathy and support by offering guidance and an environment in which the person can overcome the struggle. Showing
There are many misconceptions about the MVP concept, which means that simply defining it is not enough. Nevertheless, a definition is a good starting point. MVP stands for Minimum Viable Product — a term introduced by Eric Ries in Lean Startup. While MVP results in a “product,” the main point is in the process of gathering data — MVP software development is a process of learning and exploration. The idea behind MVP development is to collect as much validated information about the potential users as possible with the least amount of effort. That is why measuring the results in terms of “products” is not accurate as the “product” is not the case — MVP allows us to find out whether a prospective product is needed, feasible, and worth making. The MVP approach means building a working version of a product to test the concept as a whole. This requires going through all the development stages and paying attention to the product’s functionality, usability, and design to collect as much user and usage data as possible. Source: Net Solutions As a result, MVP can be seen as a mindset that stands behind the development process due to its focus on learning and user-oriented approach which fits well with agile methodology and lean design practices. This article focuses more on the relationship between MVP, agile and lean design. MVP software development allows companies and startups to save time and money on product design In contrast with MMF (Minimum Marketable Feature) and MMP (Minimum Marketable Product), MVP is not focused on earning. MVP is not a prototype because it is an actual working product, but it is also not a full product yet. This is important because these are some of the points of confusion associated with MVP development. Source: e-Zest The main purpose of MVP development is to test business assumptions by creating an early usable version of a potential product to collect customer feedback. The feedback data then can be used to develop a full-scale product, to transform the product into something else or to abandon the product idea. Source: Interaction Design Foundation Companies and startups turn to MVP development because it is cost-efficient and less risky than full-scale product development. Developing a full-scale product could sometimes cost more than $200,000 which is a serious investment. Timewise, it usually takes between 1.5 and 3 months to develop an MVP, while developing a full product could take a minimum of 6 months. This, however, is a rough estimate, and the final numbers depend on the actual project complexity and scope. Collecting early feedback without initial major spending is especially important for startups, as 42% of them fail because there is no market need for their products, 29% fail because they run out of cash, and 17% fail because they create user-unfriendly products. MVP development could reduce these risks as it allows testing and adjusting the product to the specific market and user needs before investing in it. MVPs are tools for testing business ideas in the Lean Startup approach to product development MVP development is a part of the Lean Startup methodology that presumes continuous user feedback in the product design process. This means that users stand at the center of product development, which allows testing real-world applications of business ideas before letting them onto the market. Lean Startup is an iterative agile practice and resembles a scientific approach where experiments are used to test hypotheses. According to a publication by Eisenman, Ries and Dillard, a hypothesis-driven approach allows entrepreneurs to address the uncertainty associated with new product development with a series of MVPs. The latter is needed to gain sufficient information to either falsify or confirm the initial business model hypothesis, while each particular MVP represents the minimum set of activities required to disprove an initial hypothesis. Source: Net Solutions There are different kinds of hypotheses (with corresponding research questions) that could be tested with Lean Startup, such as persona hypotheses (does a particular kind of user exist?), problem hypotheses (does this product address the problems of our customers?), value hypotheses (will anybody use/buy the product?), customer creation hypotheses (how the product gets to the user?) and usability hypotheses (is this the way the product is to be used?). The value hypothesis is the one that MVP agile development is usually aimed to address. As a result, Lean Startup methodology presumes two main practices that lie at the core of product design: the scientific method (hypothesis testing) and the use of small batches (MVP development). This combination is employed in continuous assessment and testing, where MVP is an efficient tool for validating business ideas. MVP development is an efficient way of assessing product value for potential users There are several ways to validate value hypotheses with MVP. The most common are Concierge MVP, The Wizard of Oz (WoO) MVP, and Sales MVP (or Smoke Test MVP). Concierge MVP is a way of testing business hypotheses by replacing a technological solution with humans. It is used to find out whether there will be a demand for the proposed product without actually building the product. An example of this approach could be a shopping list app. Instead of building a fully functional service, an entrepreneur could physically go to a grocery store and observe how customers shop, ask them about their shopping practices, and shop with them, performing the features of a proposed app, such as scanning products, looking for discounts, and dividing purchases into categories. The benefit of such a procedure is getting first-hand user experience and feedback without actually building an app. The downfall is that the results and experience could be biased because what works in interpersonal encounters does not necessarily work the same way via technology. The Wizard of Oz MVP is similar in that there is no fully working software behind the interface. Similar to Concierge MVP, the features are executed by a human while the user is not aware of this. For example, a person could communicate with users online pretending to be a chatbot
We all know the drill of a complex project—no documentation, no clear requirements from the client, the tester doesn’t know what to test, there’s no timeline, or there’s an unrealistic deadline, the fixes are quick and dirty, and change requests keep piling in. Sounds familiar and oh-so painful, right? Let’s see how we can overcome these challenges. In the following article, we’ll explore why planning is detrimental to the project’s success. What is the project life cycle? The project life cycle refers to the order of processes in delivering a project and a useful perspective on a project, no matter the industry, methodology, or framework used. The project manager is the one responsible for the entire project life cycle. Among other responsibilities, the project manager will oversee the project scope, budget, resource allocation, tasks, timeline, quality, risks, and stakeholder management, and a project plan is the go-to basic step-by-step framework to oversee all these aspects of the project. A project’s life cycle is mainly split into 5 phases as defined by the Project Management Institute(PMI): Initiation, Planning, Execution, Monitoring, and Closure. Yet, some will wholeheartedly state that the Planning stage is the most crucial of all. Let’s see why. The role of the planning stage The planning stage is a time for clarification. Apart from setting the overall project direction, this is the time to define the desired deliverables, a timeline, milestones, and a budget. Planning is when you get a grip on the bigger picture, a time to split the project into more manageable tasks and allocate resources. It often results in documentation, such as the project scope statement (PSS) and work breakdown structure (WBS), that will act like a compass for all the professionals involved during the project life cycle. If the planning stage is done properly, it will increase the chances of project success. Let’s take a look at the differences between the trajectory of a project with and without a project plan. Imagine you are the project. A planned project would look like a hiking activity on a 2 hours mountain route. You’re well-equipped. You have water and snacks with you, and proper hiking shoes. You have ups and downs, get tired, and pause to rest, but you know exactly where the peak you have to reach is. You have marks along the way, and the path is set. Even if you trip and fall or the wind blows a little harder, you get up and back on your way in no time. You are prepared in case of pretty much anything. You reach the peak of the mountain successfully and you can yodel if you wish to do so. As for the unplanned project, imagine a marathon. You are having a great time, relaxing, and you find out that your friends have signed you up for a marathon. What marathon? Suddenly, you hear the start whistle. All you know is that you have to start running, you don’t know where the finish line is, you ask around, and everyone else is pretty much clueless. Everything is timed, and you keep on running, following the crowd hoping they’ll lead the way. You had no expectations of winning anyways. It starts raining, you have no time to drink water, and you find out that you have been all running in the wrong direction, so you now have to go back. Ultimately, you reach the finish line, exhausted. You’re told that your performance was not exquisite, but good job for making it through. I believe that these scenarios sum up the two very contrasting ways a project can run with and without a proper plan. The positive scenario: the roadmap is planned, everybody knows what to do, and they’re all motivated and prepared in case something unfortunate happens. There are documents to confirm the direction and expectations. The timeline is known, and the breaks are scheduled within the timeline. There’s enough fuel, and even though you might be tired in the end, you have the satisfaction of a job well done. On the other hand, in the case of an unplanned project, there’s a constant state of confusion, and the sudden obstacles are greatly affecting it, as nobody is prepared. There are setbacks and wasted effort and time. In the end, exhaustion takes over the satisfaction of completion, and the result is not one to be proud of. Why is planning often skipped? Too often, the planning phase, the time for determining the feasibility of the project, is skipped or rushed. As stated above, the project starts with the Initiation phase, where the idea of the project is communicated: mainly a rough goal and purpose of the project, and that is it. If you are lucky, you get a Project Charter, but most of the time, you’re working with some scattered meeting notes. The planning phase should be the time to actually pinpoint the requirements and make the project’s trajectory as clear as possible. So why is it skipped? Rushing into execution: The most common reason is the rushing from the business department. They want something done, and they want it done yesterday. Therefore, a lot of pressure to deliver is thrown on teams. So they receive a rough undocumented scope, and they start working. Professionals know how to tackle a scope without a project roadmap, and they figure it out as they go along, but the results will not be nearly as great, and the effort put in will be highly increased. Lack of understanding or expertise: Not understanding the importance of planning might be the cause of skipping it altogether. Skipping the planning stage may result in the following: An affected company image; Affected employee well-being; Wastage: time, effort, development, and money; Lack of direction and focus; Misunderstanding and confusion; Poor communication; Scope creeps; Stakeholder relationships are negatively affected; Low-quality output; Increased risks of project failure. Steps in Project Planning During the Planning Stage, there are a few steps to take: 1. Establishing project needs Analyzing
When building a digital product, the contribution of designers and developers is equally important. Sadly, the handoff culture nurtures a predominantly dysfunctional relationship between the two teams, and the lack of communication can lead to poor results. The ones to pay the price for these feuds are usually the user, the client, or both. In an ideal world, the two teams could look past organizational models and simply work together. The situation is so out of hand that Google launched a series of interviews titled “Designer vs. Developer” back in 2017 in order to try and guide teams towards efficient collaboration. Unsurprisingly, the comments on these videos range from cynical remarks to testimonials of defeat. Because usability cannot exist without adequate software development to back it and good programming is useless in the absence of good design, here is the ultimate guide to how designers and developers should support one another: 1. Remember who you’re doing this for The product is meant for a specific user base. Keeping those people at the heart of the development process helps both teams set their egos aside and focus on playing the long game. Factoring the user into cross-team decisions will help everyone take changes less personally. 2. Respect each other It’s important for both teams to understand each other’s work and their place within the project. Ideally, an explanatory session should be held before designers and developers begin working together. Each team should have a deep understanding of their own processes in order to be able to adequately explain them to the other. A healthy work environment fosters the confidence and creativity needed to make amazing digital products. Simply handing over a PDF of the design or requesting changes off the bat is not a good way to begin any working relationship. Respect one another’s craft. Take note of each other’s experience and expertise in order to create the best possible version of the product. 3. Have an inclusive outlook Involving the development team in user testing practices, or simply showing them the findings, will help them take ownership of the project from earlier on. If they lack the time to join in on user interviews, give them the option to look through session recordings or a summary of results. Any user feedback should be shared with both teams. This helps everyone stay focused on what truly matters, which is user satisfaction. Additionally, designing without any consideration for technical constraints is bound to fuel resentment among the two teams. Collaborative work can help identify the limits of technical feasibility earlier on. Designers and developers can find creative workarounds together. This helps keep the project within its time and budget constraints and saves the client money in the long run. 4. Make communication a habit Maybe you’re working from home, or you don’t work from the same office. Figure out which communication methods work best, as some people have clear preferences. It’s very important that both teams set time aside in order to come together and discuss their progress. Start your collaborative journey with a video call to get to know one another. When people are at the beginning of their working relationship, video calls are preferable to written communication. Time wasted inferring the meaning of an e-mail or a reply on Slack can be better spent developing solutions together. 5. Show your work regularly In order for adjustments to be made in time, it is essential to have an iterative work process in place. Both teams should contribute and provide feedback on each other’s work. Sharing work with the other team as soon as a design or development stage is completed supports the iterative process. Use collaborative tools in order to leave notes and feedback. Figma, Zeplin, and live staging tools like GitHub are extremely useful. Additionally, team members can also help each other visualize the problem by using whiteboard tools. Designers should aim to be as specific as possible when it comes to how certain elements of the design are intended to act. High-fidelity prototypes and interactive animations should give the development team a clear idea of how everything is supposed to work. 6. Time change requests adequately Being able to see each other’s work as it progresses can inspire team members to request changes. While human creativity is limitless, each project has specific time and budget constraints. People’s willingness to make changes depends on which stage of the process they’re in. It can be difficult for someone who is not a specialist in a certain field to correctly estimate how long a change will take. This is why having a conversation about the change can salvage a working relationship rather than allowing it to be ruined. Both teams should learn to absorb small changes without having to delay delivery or generate additional costs. 7. Learn each other’s language There is a professional language barrier between designers and developers. Designers tend to speak about their work in qualitative terms, while developers are more inclined to view it quantitatively. In order to move past biases, both sides need to be open to learning about the other’s language, tools, and methods. There’s been an ongoing debate about whether designers should learn how to code, and more recently, during Config 2021, Mina Bach also raised the question “Should Devs Design?”. Like in any partnership, things work smoothly if each side has an in-depth understanding of the other. Designers benefit from learning a bit of CSS, Java, and browser DevTools, while developers could take part in user research and brainstorming sessions more often, even if they’re just there to listen in. Wrap-Up While it might seem overwhelming at first glance, the collaborative process between developers and designers largely relies on respect, efficient communication, transparency, and sufficient knowledge of the other team’s practices. To foster a healthy working culture and launch top-of-the-line digital products, the two teams should get to know each other. While this might be difficult to achieve when outsourcing development or design services, companies should strive to bring
We all want to be part of a well-delivered project, a product to be proud of, and suited to be showcased in our portfolio. By following some key quality management principles, we can make sure that the execution of the project is at an expert level, that we don’t have to settle for mediocrity, and that the outcome is a spot-on product. Quality is crucial in software development. The lack of quality or software failure brings along many negative consequences. We are talking about financial loss, damaged reputation, legal liabilities, and other industry-dependent issues. All of these and more have pushed toward the notion of quality management. What is quality management? Quality management is the process of overseeing the activities and deliverables that should be accomplished to obtain or maintain a desired level of quality. Quality in project management is defined as a “totality of characteristics of an entity that bear on its ability to satisfy stated or implied needs,” as per PMBoK. According to John Ruskin, “Quality is never an accident. It is the result of intelligent effort.” In this article, we will go through the key pillars in quality management: quality planning, quality assurance, quality control, and quality improvement, as well as through some of the best practices and solutions to ensure you are well prepared to deliver premium quality. Quality pillars The main pillars of quality act like a framework with the scope of ensuring that the product or service a company or professional wishes to deliver is up to the quality standards, meets the wishes and expectations of the customers, and assures in the meantime the continuous improvement of all the quality processes involved. Quality planning Quality planning is one of the key components of project quality management. Its main purpose is to define the requirements of the project and clarify its expectations and desired outcomes as well as its quality standards. Utilizing this plan ensures that the set standards are being followed. This type of planning is closely related to the project plan as it strives to understand the stakeholder’s needs and vision. Once the requirements are clear, the standards should be defined. Here we can incorporate metrics to follow, targets, and testing procedures that attest that the level of quality is being met. Risk management is also to be considered at this stage and implies identifying potential risks that might affect the project’s quality standards. Defining potential risks and mitigating solutions will decrease the odds of compromised quality. In short, quality planning ensures the standards are defined, and the project can meet these standards. Quality control Quality control refers to the ongoing process of inspecting and verifying the quality of the project deliverables to guarantee that they meet the quality standards previously set. It involves reviewing the work that has been done, identifying any defects, and then performing corrective actions. The first step in quality control is establishing the quality caliber and requirements of the project. The second step is inspection, followed by reporting the defect findings. All defects must be addressed. Past the quality control activities come the continuous improvement activities that make sure that the process is refined and fewer and fewer defects will pop up. Quality assurance Quality assurance also refers to all the activities purposely designed to satisfy the quality standards of the deliverables, but it is not quite the same thing as quality control. Quality control is focused on identifying and eliminating, while quality assurance is focused on prevention. It implies having a systematic approach and establishing procedures to secure quality standards and ensure the stakeholders are happy with the project. The procedures are outlined in the quality plan. Then it’s time for monitoring and evaluation, performing testing and validation, and rechecking the procedures to make sure that they are running properly. Some of the procedures performed in software quality assurance are the following: requirements analysis to make sure that the information is complete and testable, design reviews to check if they meet the quality standards and requirements, various types of testing such as unit testing, integration testing, quality audits, and process refinements. Quality continuous improvement Quality continuous improvement is the pillar of refinement and improvement of the tools and processes used to deliver high-quality projects. The scope is a constant proactive search for better solutions, and it strives for growth in all areas of project delivery. Firstly, continuous improvement is a mindset that must be promoted within the organizational culture. The team members should feel motivated to find better ways of doing things. Secondly, monitoring systems are put in place to help evaluate the quality of the deliverables. By identifying the areas of improvement, and other data collected, corrective changes can be implemented. After the changes are applied, a period of observation is needed in order to establish how effective the changes were. Finally, the process is pursued in a loop. One methodology popularly used to improve the quality of products and processes is Six Sigma, and its focus is to minimize defects and increase user satisfaction. It has 5 stages: Define, Measure, Analyze, Improve, and Control(DMAIC). Quality Dimensions Quality dimensions or characteristics are different aspects involved in the quality of a product or service and are often used to assess the level of quality in regards to stakeholders’ needs and expectations. They can also be used to pinpoint areas of improvement and to evaluate the effectiveness of the quality management processes that were settled. Types of Quality dimensions Performance : the product’s speed, accuracy, and efficiency in performing its tasks. Features : the set of functions the software offers. Reliability : constant, predictable performance without failures. Durability : the performance and resistance over time. Conformance : meeting the standards and specifications. Serviceability : the ease with which the product or service can be maintained. Aesthetics : the quality of the design in the user experience. Perceived quality : user’s impression of the product or service, from UI/UX perspective, perceived value, satisfaction. Quality dimensions in information processing software Relevance : is the information useful? Accuracy : is the
SQL Server execution plans are an essential tool for database administrators and developers to understand the performance of SQL queries. An execution plan is a road map that shows how SQL Server executes a query, detailing how the data is retrieved from tables, the indexes used, and the operations performed. Execution plans are useful because they allow database administrators and developers to identify performance bottlenecks and optimize queries to improve overall database performance. By looking at the execution plan, one can see which operations are consuming the most resources and identify the most expensive parts of a query. Anyone who works with SQL Server databases, including database administrators, developers, and performance engineers, should be familiar with execution plans. They are particularly useful for troubleshooting slow queries, where the execution plan can reveal the cause of poor performance. For example, an execution plan might show that a query is using a table scan instead of an index seek, leading to poor performance. With this knowledge, the query can be optimized by creating an appropriate index, significantly improving performance. In this article, we will discuss how execution plans are generated, how to interpret them, and how to use them to optimize query performance. Generating an Execution Plan SQL Server can generate two types of execution plans: estimated and actual. The estimated execution plan is generated before the query is executed, and it is based on statistics about the tables and indexes involved in the query. The actual execution plan is generated while the query is executing, and it includes real-time performance statistics. Interpreting an Execution Plan An execution plan can contain several operators, such as Index Scan, Index Seek, Nested Loops, Merge Join, and Sort. Each operator represents a step in the query execution process. Index Scan: Scans the entire index looking for the requested data. Index Seek: Seeks directly into the index looking for the requested data. Nested Loops: Performs a join by looping through each row in one table and matching it with rows in another table. Merge Join: Sorts both input sets and then merges them based on a specified join condition. Sort: Sorts data based on one or more columns. The execution plan also shows the cost for each operator, which is an estimate of the resources required to execute the operator. The cost is calculated based on factors such as the number of rows, data size, and the number of operations required. The cost of the various operators in a SQL Server execution plan can be interpreted as an estimate of the amount of work or resources required to execute a particular query. Understanding the cost of each operator can be helpful in identifying potential performance bottlenecks in a query and optimizing its execution plan. Below are some common operators in SQL Server execution plans, as well as their cost and how to interpret the result: Index scan – An index scan reads all the rows in an index, which can be expensive if the index is large or if there are many non-selective rows. The cost of an index scan is proportional to the number of rows in the index. A high cost for an index scan may indicate that the index is not being used effectively or that the query is not selective enough. Index Seek – An index seek uses an index to look for specific rows in a table, which can be more efficient than an index scan if the query is selective enough. The cost of an index seek is proportional to the number of rows retrieved. High costs for an index seek may indicate that the query is not selective enough or that the index is not being used effectively. Nested loops – A nested loop joins two tables by looping through one table for each row in the other table. The cost of a nested loop is proportional to the number of rows in the outer table times the number of matching rows in the inner table. A high cost for a nested loop may indicate that the tables being joined are not optimized for the join or that the query is not selective enough. Merge Join – A merge join connects two sorted inputs by comparing each row in each input. The cost of a merge join is proportional to the number of rows in both inputs. A high merge join cost may indicate that the inputs are not sorted or that the query is not selective enough. Sort – A sort operator sorts the output of a query based on a specific column or set of columns. The cost of a sort is proportional to the number of rows to sort times the logarithm of the number of rows to sort. The high cost of a sort may indicate that the query is not optimized for sorting or that the data to be sorted is too large. When interpreting the cost of each operator, it’s important to consider the overall cost of the query and how each operator contributes to the total cost. For example, a single high-cost operator may not be a problem if the overall cost of the query is low. Similarly, a low-cost operator may be problematic if it’s used many times in the execution plan. Optimizing an Execution Plan An execution plan can help you identify performance issues, such as missing indexes or inefficient joins. One of the most important factors affecting query performance is indexes. Indexes can significantly improve query performance by allowing SQL Server to quickly find the data you need. When examining the execution plan, look for index seks, which are much faster than index scans. An index seek indicates that the query is using an index to find the requested data, while an index scan indicates that the entire index is being scanned to find the data. Example: Consider the following query: SELECT * FROM orders WHERE customer_id = 12345 If an execution plan displays an index seek for the customer_id column, it means that the query uses the index efficiently to find the
Effective communication and collaboration are key to successful software development. However, as many developers and project managers know, achieving this is easier said than done. In-person meetings, despite being a tried and true approach, are often seen as outdated and time-consuming in today’s fast-paced business world. Yet, as a senior .Net developer with years of experience working remotely, I can attest to the value of in-person meetings for understanding the business and fostering strong working relationships. In this article, I will discuss the importance of in-person meetings throughout the software development lifecycle, drawing from both my personal experience and industry research. Why Are In-Person Meetings So Important? A few years ago, I was invited to the USA to participate in a large software development project planning that involved multiple departments and teams, each with its own goals and priorities. As a fully remote working developer, I knew that virtual meetings would be the primary means of communication with my colleagues and clients. However, I soon realized that virtual meetings were insufficient for solving some of the project’s more complex issues. That’s when I decided to travel to the client’s office to meet with the different departments in person. During these in-person meetings, I was able to directly discuss the project’s challenges and possible solutions with representatives from each department. This allowed us to quickly figure out ad hoc solutions to the issues we were facing without having to rely on multiple virtual meetings that were difficult to schedule due to everyone’s busy schedules. Additionally, meeting in person allowed us to establish a rapport and build personal connections that made subsequent virtual meetings more productive and effective. This experience reinforced my belief that in-person meetings are essential for effective software development and for building strong professional relationships. Let’s explore some of the benefits of in-person meetings and discover how to make the most of them throughout the software development lifecycle: 1. Establishing a Shared Understanding One of the most significant benefits of meeting in person is the ability to establish a shared understanding among team members. When you meet in person, you can discuss the project in detail, share ideas, and clarify any misunderstandings or ambiguities. This can help to ensure that everyone is on the same page and clearly understands the project’s goals and requirements. 2. Building Trust and Relationships Building trust and strong relationships is crucial for the success of any software development project. Meeting in person is a powerful way to establish these relationships, as it allows for face-to-face communication and the opportunity to connect on a personal level. When developers and clients meet in person, they can build trust by showing that they are invested in the project and genuinely interested in the client’s needs. This can be accomplished by actively listening to the client, asking questions, and demonstrating a willingness to collaborate and find solutions together. When trust is established, clients are more likely to share information, be open to new ideas, and work collaboratively towards a common goal. In addition to building trust, meeting in person can also help establish personal connections between everyone involved. This can be done by engaging in activities outside of work, such as going out for drinks or dinner after a planning session. These informal interactions can help build rapport, establish common ground, and foster a sense of camaraderie between team members. For example, after the program increment planning session was done, everyone was invited out for drinks after 3 long days of work. We were able to relax and chat with one another, which greatly improved our relationship and made us feel more like a cohesive team. As a result, we were able to work more collaboratively and effectively on the project, leading to better outcomes for both our team and the client. 3. Identifying and Addressing Issues Being face-to-face also helped with identifying and addressing issues more efficiently. During the planning session I was invited to, we were able to discuss our plans and identify potential issues with representatives from multiple departments. Since we were all on the same floor, we were able to quickly address these issues and come up with solutions in real-time without relying on multiple virtual meetings or email exchanges that can often lead to miscommunications or delays. This allowed us to move forward with the project more quickly and with greater confidence. 4. Facilitating Innovation Innovation is often the result of collaboration and creative thinking. When you meet in person, you can bounce ideas off of one another, brainstorm new concepts, and engage in a more collaborative problem-solving process. This can lead to new and innovative solutions that may not have been possible with remote work. For instance, during the same program increment planning session, our team discussed a particularly tricky problem related to the integration of two different software components. Despite multiple virtual meetings, we were unable to come up with a solution that satisfied everyone. However, during the in-person meeting, we started discussing the problem over coffee. Someone from another team overheard our conversation and mentioned that they had encountered a similar issue in the past and had a potential solution. This sparked a lively discussion among all of us, and eventually, we were able to combine everyone’s ideas to come up with a working solution. 5. Improving Communication Effective communication is one of the three key elements of building successful client relationships. In-person meetings provide benefits that simply cannot be replicated through video conferencing or other virtual communication methods. For example, being in the same room as your colleagues and clients allows you to pick up on non-verbal cues, such as body language and facial expressions, which are not always apparent during virtual meetings. Additionally, there is a psychological effect of being in front of a screen that can impact communication and productivity and cause fatigue or disengagement. During a face-to-face meeting, you are fully present in the moment, with no distractions from notifications or other work. You are able to
Becoming a middle software developer is a significant milestone in any junior developer’s career. However, the journey from a junior to a middle developer can be a challenging one, as the software development industry is highly competitive. The transition requires a combination of technical skills, soft skills, and a commitment to continuous learning and improvement. In this article, we’ll discuss some key things that a junior software developer can do to become a middle software developer. 1. Focus on Technical Skills As a junior developer, it’s crucial to focus on improving your technical skills. Here’s what you can do: a. Learn new programming languages and frameworks: Keep an eye on the latest programming languages and frameworks and learn them. For example, if you’re a Java developer, learn Spring or Hibernate. If you’re a C# developer, learn .NET Core or Xamarin and so on. b. Practice coding regularly: Practice coding regularly, solve coding challenges, and participate in coding contests.Interacting with other developers can help you discover coding good practices and exchange tips. This will also help you hone your problem-solving skills and improve your coding speed. c. Work on open-source projects: Contributing to open-source projects is an excellent way to learn from experienced developers and work on real-world projects. d. Learn data structures and algorithms: Data structures and algorithms are fundamental concepts that every developer should know. Learn data structures such as arrays, lists, queues, and stacks, and algorithms such as sorting and searching. e. Stay up-to-date with industry trends: Follow blogs, attend meetups and conferences, and read industry publications to stay up-to-date with the latest trends in the software industry. 2. Improve Soft Skills Soft skills such as communication, collaboration, and problem-solving are just as important as technical skills. Here are some ways to improve your soft skills: a. Improve your communication skills: Communication is essential in the software development process. Practice communicating clearly in both verbal and written forms. Learn to actively listen and ask pertinent questions. b. Work as a team member: As a software developer, you will collaborate with other developers, testers, and stakeholders. Learn how to effectively collaborate and work in a team. Accept feedback and learn from your peers. c. Improve your problem-solving skills: Problem-solving is a necessary skill for any software developer. Learn to deconstruct complex problems into smaller, more manageable chunks and apply problem-solving techniques like debugging, testing, and prototyping. d. Develop time management skills: In order to meet deadlines as a software developer, you must be able to manage your time effectively. Work efficiently by learning to prioritize your tasks. 3. Take Initiative Taking initiative is a key characteristic that differentiates junior software developers from middle software developers. Here are some ideas for taking the initiative: a. Volunteer for difficult tasks: Volunteer to work on difficult tasks that are outside of your job description. This demonstrates your willingness to take on more responsibilities and push yourself. b. Identify and fix issues : Identify and repair problems as they arise during the software development process. For example, if you discover a bug in the code, notify your colleagues and collaborate to fix it. c. Mentor other junior developers: Mentor and share your knowledge with junior developers. Not only will this help you develop leadership skills, but it will also demonstrate your technical knowledge and ability to explain complex concepts. 4. Learn the Business Side of Software Development To advance your career as a middle software developer, you must first understand the business side of software development. Here are some suggestions: a. Understand business requirements: Understand the software development project’s business requirements and how your work fits into the overall strategy. This will assist you in making better decisions and prioritizing your tasks. b. Understand project management: Understand project management methodologies like Agile and Scrum, as well as how they are used to manage software development projects. c. Industry knowledge: Stay current on industry developments. 5. Develop a Strong Work Ethic To advance in your career, you must develop a strong work ethic. Here are some pointers to get you started: a. Be disciplined: Establish and stick to a routine. Make goals for yourself and keep track of your progress. b. Be well-organized Final Thoughts To summarize, becoming a middle software developer takes a combination of technical and soft skills, as well as a commitment to continuous learning and improvement. As a junior developer, you should concentrate on developing technical skills and soft skills, taking initiative, and learning the business side of software development. By adhering to these key points, you can quickly advance as a middle software developer and achieve career success. Remember that it takes time, effort, and dedication to achieve your goals and become a successful middle software developer, but with the right mindset and approach, you can do it. At Nordlogic, we’re constantly looking for developers that are eager to learn and grow with us. Check out our open positions! Article by Andrei Mitocaru .NET Developer
Undoubtedly, you were put in a position where constructive criticism was needed of you. And I bet, in your perspective, it meant “negative, negative, negative.” If you are a people-pleaser, then worry and cold sweat will set in, and you will be wondering how you will get through this. Why are you hesitant to criticize bad behavior or performance? You worry about the recipient’s response: What if they become angry? What if this results in disagreement and a strained relationship? What if I demotivate them and it negatively impacts their performance or self-esteem? What if they only consider my negative comments? What if they will hate me as a result? What if I am unable to effectively convey my message? Let me tell you, if you are worrying about it, that already helps you be very empathetic while delivering the feedback. Step 1, checked! In this article, we should look at “constructive criticism” through the golden circle model of “What, Why, How,” and we will explore why you do not need to resort to negative criticism when providing much-needed feedback. What is constructive criticism? We have a preconceived interpretation that constructive criticism is negative feedback, and the confusion could stand in the name, perceiving the word “criticism” as a negative term. Constructive criticism won’t always be positive, but the underlying intent is to help someone improve and grow. While constructive criticism offers improvement suggestions and possible action items, destructive criticism is a type of criticism that is intended to undermine, affecting the receiver’s self-esteem, and could be perceived as a form of attack. The feedback receiver should leave the conversation with a sense of confidence and positivity instead of shame, anger, and resentment. Types of criticism Constructive criticism : providing feedback that is helpful and supportive, offering suggestions for improvement, focusing on growth and positive change; Destructive criticism : communicated with negative, destructive, and demoralizing language, it does not offer solutions but merely points out the issues; Positive criticism : it highlights an individual’s strengths and accomplishments; Negative criticism : focuses on the flaws and mistakes of an individual and often lacks suggestions for improvement. Negative criticism and destructive criticism both focus on providing feedback that highlights weaknesses. The difference between the two is that negative criticism leaves room for positives, although predominantly negative, and is sometimes accompanied by suggestions for improvement. The intention behind negative criticism is productive change without attacking their confidence. Destructive criticism is more harmful than negative criticism, the feedback is provided in a hostile, demeaning manner, and it can involve negative language, personal attacks, and insults. The intent behind this is to discourage and hurt, which could lead to serious mental well-being issues for the receiver. Positive and constructive criticism have things in common. Positive criticism focuses on strengths and accomplishments and is a morale booster, encouraging positive behaviors and maintaining positive attitudes. Constructive criticism focuses on both positive and negative aspects of an individual’s performance while also encouraging growth and aiming to identify areas of improvement. Constructive criticism earns the spot for the most balanced approach. Real-life examples Positive:“Your positive attitude is very appreciated; it contributes to the team’s positive environment!” Negative:“Your suggestions for improvement are well-received, but it does not help that you missed the retrospective meetings” Destructive:“Your work was done so poorly. Clearly, you do not care for quality” Constructive:“I noticed that your knowledge-sharing session was clearly structured, and it shows that you paid attention when creating it. I believe that for the future session, having small interactive exercises will increase the engagement even further!” Why is constructive criticism important? Professionals who embrace constructive feedback are more likely to advance in their professional endeavors because they have a continuous improvement mindset that will push them forward. How do you actually help someone by giving constructive criticism? Growth and performance: The receiver will gain insights into their actions or work, and they will be able to identify areas of improvement. Perhaps they were not even aware of the things they’re missing, and you have spared them some time it would have taken for them to figure it out on their own. You will increase the chances that the person will not continue to follow unproductive patterns, thus, making informed decisions focusing on improving their weaknesses and increasing their performance. Furthermore, it plays a highly important role in the quality of their deliverables. Communication and relationships: You can not have constructive criticism without clear communication. You will need to express your communication skills through open dialogue, active listening, and idea sharing. By offering constructive criticism instead of ignoring the issues and only discussing positive traits, you will, in fact, restrict your communication, causing frustration on your side and avoiding problem-solving. When you give constructive criticism, you foster a transparent, stronger, and more trusting relationship. When you offer them your own perspective, you can then collaborate to find the most inspired solutions. And when conflict is in play, by offering constructive criticism, you can address the issues in a healthy manner, leading to improvement. How should I give constructive criticism? The goal of constructive criticism is to help an individual grow and not to criticize, although it is in the name. Ideal feedback is defined by 3 characteristics: regular, not sporadic specific, not ambiguous constructive, not destructive The constructive criticism should be: Timed: Avoid communicating the feedback when you or the other person are not in the right place of mind, stressed, or emotionally unavailable. Instead, plan it when you can both be as rational as possible Private: Avoid communicating your feedback in public,; do it in a 1×1 conversation Clear: Be very specific about the point you are addressing. Do not make it personal. You are addressing an action, not their person. Make your whole case about the facts. Do not use generalizations, as you will only make your point unclear Non-emotional: Stick to your observations and be descriptive and objective, not emotional and subjective in your approach. If you are making personal attacks, you will not help the situation Suggestive: Offer solutions