The Expert Blindspot, or why you should let junior developers do code review.

The Expert Blindspot, or why you should let junior developers do code review.

Curated by: Sergio A. Martínez

When you are trying to bring a new application to life, code reviews are an essential part of the development process. They help ensure the quality of the code, identify potential problems and bugs early enough to squash them and provide the perfect opportunity to get feedback from your peers. This is a source of insight and helpful criticism that can help a developer grow.

The-Expert-Blindspot-or-why-you-should-let-junior--icono

After all, in big collaborative projects such as software development, no part of the process is made in isolation; receiving advice is an important part of every good team, cultivating a better collaborative environment, and establishing a sense of trust and camaraderie among the team. Code reviews, for example, are one of the most important steps in this process, but how they should be conducted, and by whom, are questions to keep in mind when trying to guarantee the quality of any product. 

Naturally, this task tends to fall on the shoulders of the more experienced developers of a team, as seniors should know what they are doing and what to look for, but is their input the only valid one? Or should junior developers be allowed to do code reviews for their more experienced teammates? What benefits can a team have by giving the least experienced members such a responsibility?

We want to make the case that allowing junior developers to review the code written by a senior collaborator not only helps them grow their skills, but it’s a procedure essential to ensure quality in the codebase. Any team that doesn’t employ this strategy might be missing a great opportunity there, but what’s the reasoning behind it?

“You can’t win against someone who makes a bet for fun”

The Expert Blindspot, or why you should let junior develop

In professional poker, winning against amateurs is not exactly guaranteed. Of course, luck is involved, but the technique is important too. Knowing how to read the tells of your opponent, having a good idea of which cards are currently in play, and learning to push your bets at the most strategic moments are part of the toolset of any professional player. And all this can be disrupted rather easily by an amateur with less experience at the game because they are harder to estimate and bluff.

This interesting irony was noted by movie critic Gene Siskel, an experienced player when he lost against his equally famous partner Roger Ebert at a bachelor party: “You can’t win against someone who makes a bet for fun”. In other words, professional player has very specific expectations if they are going against another pro, and their decisions come from a place of knowledge and experience where possibilities tend to be more studied and controlled. So, if you are an experienced developer reviewing the code written by another experienced developer, what exactly do you expect to see? Is that different from reviewing the code written by a junior programmer? Of course, the answer is yes. This phenomenon is called “the expert blind spot”:

The experts will have difficulty to understand why the beginners don’t understand. For them, the concept feels obvious. The learners, on the other side, won’t be able to ask the good questions either, since they’re not aware of what they don’t know. How to ask good questions if you have no idea what kind of answer you want?

Although the expert blind spot is usually used in the context of teaching, the difficulties a veteran might have to pass along his knowledge in the context of code reviews are similar to our earlier poker example. A senior reviewing the code of a senior tends to have certain expectations about it, which is both a benefit and a risk: certain things might be taken as “obvious” and not be considered until it’s too late.  

After all, anyone who has ever worked on a complex project knows the frustration of feeling where something might be wrong but can’t quite see it. That’s why it’s always a good idea to take a look at it with fresh eyes. In that sense, junior developers can bring a lot to the table when it comes to code reviews, free from all assumptions and rigid pathways that might trip up even the best programmers.

A good way to conduct a code review

The Expert Blindspot, or why you should let junior 2

However, that is not to say that junior developers should bear the entire responsibility of code reviews; guidance and backup are still needed to ensure they are properly conducted during the sprint. In the words of Carlos Estrada, a Lead Developer Application at Scio:

It’s generally a good idea to have a junior dev participate in code reviews, it’s useful for them to see what changes a senior does, and learn to find and track changes, but they cannot be the ones to approve the review. There have been a few internal projects I supervised where mostly juniors were involved, and when the time was short, the juniors had to do it themselves, learning from the comments I have left on earlier reviews.”

In short, junior developers are the backbone of any software development team. They may not have as much experience as their senior colleagues, but they can make up for it with a desire to learn and master the craft, which makes them a perfect addition to a thorough code review: 

  1. As already said, by conducting code reviews, junior developers can see for themselves how code written by a veteran looks; which good practices are implemented, proper comment discipline, and readability, which can help them become better programmers. 
  2. A junior reviewing code can spot mistakes that a veteran might otherwise overlook due to the expert blind spot; a fresh perspective, free of all the expectations and assumptions a senior can unconsciously have, can sometimes obtain a better insight of the code.  

However, not all code review processes are created equal, and for one to be effective, it should follow a few simple steps that ensure the resulting review is useful. Many veteran developers may know these steps by heart, but to a junior starting to learn the value of these exercises, the following procedure is always recommended: 

  • First, developers should submit their code for review early and often.

    This allows for more frequent feedback and helps to prevent errors from becoming entrenched in the codebase. 

  • Second, all reviewers should have a common understanding of the project’s goals.

    This helps to ensure that everyone is on the same page when it comes to evaluating the code. 

  • Finally, reviewers should focus on providing constructive feedback.

    By indicating what works well and what could be improved, reviewers can help developers produce better code with fewer errors. 

So, to recap, code reviews are an important part of the software development process, and juniors can learn a lot from participating in them. However, they need guidance from seniors to make sure that the code is correct and meets the standards that these projects strive for. And the final approval always must come from a senior member of the team, keeping an eye on the process, and making sure everyone can learn from it. After all, experience builds on the chance to bring new perspectives and let them teach new things.

Scio is an established Nearshore software development company based in Mexico that specializes in providing high-quality, cost-effective technologies for pioneering tech companies. We have been building and mentoring teams of engineers since 2003 and our experience gives us access not only to the knowledge but also the expertise needed when tackling any project. Get started today by contacting us about your project needs – We have teams available to help you achieve your business goals. Get in contact today!

Why can your career portfolio look like a squiggly line?

Why can your career portfolio look like a squiggly line?

Curated by: Sergio A. Martínez

What are the expectations you have for your career? And we mean real, tangible things that you can expect from choosing a particular professional field: Autonomy? Flexibility? Knowledge? A better living standard? The chance to grow as a person? Trying as many new things as possible? This is a line of thinking you should consider when building a career portfolio; the definition of a meaningful career has changed and choosing the correct workplace can make a world of difference for a professional looking to put their talents to the best use.

Why-can-your-career-portfolio-look-like-a-squiggly-line

Why choose a career portfolio?

And one of the most significant changes in recent years is how the idea of the “career ladder” has slowly started to disappear thanks to a completely different job landscape, where spreading out skills and options has begun to be seen as the best career move possible. A “career ladder” in software development is typically referred to as starting as an entry-level programmer, working on coding and bug fixes. As they gain experience, they may move up to more senior positions, such as a Lead Developer or Project Manager. However, more and more developers agree that taking on new challenges and continuously learning new technologies is essential for success in this ever-changing field, with no “right” path to take when climbing the career ladder in software development. Rather, it depends on each individual’s skills and preferences.

This has resulted in the idea of forgoing career ladders, and instead focusing on “career portfolios”, or the idea of acquiring a varied list of skills, interests, and experience, tailored to your affinities and what you want from a professional field. But what does a career portfolio look like in practice and how to choose a workplace where you have the flexibility to experiment and learn new things?

The squiggly line to your full potential

Why can your career portfolio look like a squiggly line 2

We have talked before about how software development is already a pretty open career path, where the central concept (solving complex logic puzzles) can be applied almost anywhere. And with new technologies and approaches emerging all the time, those who want to succeed in this field need to be able to quickly adapt and learn new skills, which is why more and more developers are warming up to the idea of flexible career paths.

Having the opportunity to move between different roles and teams here at Scio is how to help ensure our people remain agile and responsive to change”, says Helena Matamoros, Human Capital Manager at Scio. “We know the importance of providing the opportunity to try new things and different approaches. In software development, it’s very important to encourage innovation and creativity, no matter where you are in your career. 

Nevertheless, where to start with this flexibility and craft a portfolio that showcases your talent, skills, and interests? After all, as the world keeps changing at an ever-increasing pace, those who embrace change will be the ones who thrive. In the words of the Harvard Business Review: “A career portfolio approach solves these problems and takes career development to a new level. It’s not only a tool for individuals to rethink their professional identity and reach their full potential.” So, as a starting point, you can ask yourself the following questions to plan your portfolio.

A) How much free time will you need?

An excellent way to define your career progress is by deciding how much time you are willing to devote to learning a new skill. The best way to go about it is to develop a yearly plan divided into quarters, months, weeks, or even days, decide on specific goalposts and work towards them. Depending on your job, your time might be at a premium, so knowing what’s the best path depends on your skills, talent, and amount of time available, critical to growing and becoming good at something new.

B) What are your interests?

As we said, a good portfolio comprises stuff you are personally interested in, but also makes good synergy with the career path you are currently following; for example, if you like being with people and think you have leadership qualities, why not work on your soft skills to be a Team Lead? Or a project manager? After all, these roles are more about getting close to people, listening, and empathizing, but still, they need a solid understanding of tech to the scope and plan effectively. 

C) Does your workplace allow for flexibility?

However, this might not be a smooth experience if you aren’t part of an organization that values this kind of growth, the number of which is growing as more people see the value in following a squiggly line. Organizations like Scio, for example, not only allow developers to explore different areas of software but actively offers courses and workshops (under the Sensei-Creati Program) that actively want developers and everyone else to grow as they see fit. Hence, researching which kinds of opportunities a company offers before joining is always the best idea. 

Focusing your career on yourself

Why can your career portfolio look like a squiggly line 2

A lot of people think that the best way to further their career is to focus on external factors, like networking, making money, or climbing up the corporate ladder, but the truth is that focusing on yourself and building up a portfolio of diverse interests and skills has no comparison, especially in the software development field. When you invest in your own professional growth, you become more skilled and knowledgeable, which makes you feel more balanced and successful. 

After all, you are the only person who knows what you want out of life, and when you make career decisions based on what you think will make other people happy, you’re not likely to end up in a job that makes you truly satisfied. On the other hand, if you stay true to yourself and pursue opportunities that align with your goals and values, you’ll be much more likely to find a fulfilling career. 

There’s plenty of reasons why a company should offer growth opportunities for their employees, and not only because it helps productivity or retain talent”, continues Helena about the philosophy of Scio. “It’s important to understand that many job seekers are looking for more than just a steady paycheck. They want to work for a company that will invest in their development and help them reach their full potential. It also boosts morale and motivation among everyone, When people see that their company is committed to helping them grow and develop, they feel appreciated and valued. Ultimately, growth opportunities are good for both employers and employees alike.

In the end, focusing on yourself is the best way to set yourself up for a successful career, and it’s in your best interest to collaborate with an organization that sees the value in a wide range of skill sets and affinities in their employees. Software development today is more diverse than ever, and the “ladder” upwards is just one of many options available to take during a career. So, if you want to make a name for yourself in the software development world, focus on building a great portfolio. It’s sure to pay off in the long run.

The Key Takeaways

  • The way careers work nowadays is pretty diverse, not just as a rigid path straight up, especially regarding software development.
  • Building a portfolio of talents and skills is becoming more common and more desirable, and this flexibility is an important feature of any organization looking to grow.
  • The skills you acquire should synergize with each other, but a company interested in the development of their employees already offers the workshops and options necessary to make it work.
  • Developing a person’s full potential is one of the core tenets of Scio, because that’s how true innovation and advancement are achieved. 

Scio is an established Nearshore software development company based in Mexico that specializes in providing high-quality, cost-effective technologies for pioneering tech companies. We have been building and mentoring teams of engineers since 2003 and our experience gives us access not only to the knowledge but also the expertise needed when tackling any project. Get started today by contacting us about your project needs – We have teams available to help you achieve your business goals. Get in contact today!

Scio Spotlight: Talking about passion, projects and videogame development with Pedro Ramírez

Scio Spotlight: Talking about passion, projects and videogame development with Pedro Ramírez

Curated by: Sergio A. Martínez

For many people, the idea of software development is just a job, with long hours in front of a computer, coding and debugging programs until they meet the requirements of their employer or client. However, software development can also be a fun hobby, taking on personal projects or contributing to open-source software where developers can exercise their creativity and practice their craft without the pressure of deadlines. In addition, working on side projects can give developers a chance to learn new programming languages and technologies; after all, practice makes perfect.

The-Scio-Spotlight-Talking--1

So, by working on side projects, developers can not only gain valuable experience but also try out new techniques and learn new languages. In many cases, side-projects can also be a great way to develop new skills. For example, by working on a project in their spare time, developers can learn how to manage a team or how to bring an idea to fruition. Moreover, working on side projects can also help developers stay up to date with the latest industry trends. By keeping their skills sharp, developers can increase the scope of their talents and the chance of growing professionally in ways you might not even expect.

So, this time we want to dive into the kinds of side-projects that many Scioneers have dabbled into during the years, and this time we chat with Pedro Ramírez, a Chief Architect at Scio with many years of experience, about a project he is most proud of: a complete videogame.

And this is because, for any software developer, no matter how experienced, creating a videogame can be daunting. Numerous challenges need to be solved and overcome, from designing compelling gameplay, to ensuring that the game runs smoothly on a variety of devices and platforms, to getting it into digital stores. For Pedro, though, this was an opportunity to learn and have fun alongside his son, releasing the endless runner FlyFlyFly in 2016 for mobile devices. You can still find it on the Microsoft Store, and talking about its development, shed a lot of light on the process for a software developer trying to get a project done on the side.

At first, I thought it was going to be simple, but there were a lot of challenges to solve along the road. You can use a lot of tools and libraries today to make game development easier, but still requires a lot of puzzle-solving and learning to manage your resources wisely. For example, I needed to save as much memory as possible at the start of development to make sure the game ran smoothly on every device possible, and the Microsoft tools don’t give you much. And even when I got it working, lots of things were still in the air.

However, being a solo game developer is no easy feat. Not only do you need to be skilled in programming, but also be able to create engaging gameplay, design attractive visuals, and even engage in marketing for your game to build a community around it. Of course, you don’t need to be an expert in all of these areas — there are plenty of tools and resources available to help you get started, but it’s important to have a general understanding of all the different aspects of game development if you want to be successful, and most of the time that is a challenge by itself.  

I had to develop stuff completely new to me, like the user interface, or draw the graphics and make them work as intended. Not everything is just writing code, you need a knack for art to make it look nice and appealing, which was one of my biggest learning experiences of the whole deal. When I started this project, I thought it would be easier than it was, so it was a big reality check when I realized how much I still needed to learn, especially when it comes to trying to get the word out and make it stand out in the stores.”

A passion project (in more than one sense)

Anyone who’s ever gone through software development knows how rewarding it can be to see your code doing something. It’s even more satisfying when it’s something you built yourself, just for fun. But what you might not know is that having a personal side-project in software development can be pretty advantageous, too. For one thing, it gives you a chance to explore new technologies and learn new skills without the pressure of having to produce perfect results. You can also use your side project as a portfolio piece to show future employers what you’re capable of. 

Three or four years ago, we had a client in Scio that was looking to develop an RPG-type game, similar to Final Fantasy, and I was put in charge of it thanks to my experience with FlyFlyFly”, tells Pedro. “In the end, the client had to put the project on hold for budget reasons, but we still have the source code somewhere in the Scio servers, and I’m proud of the opportunity it offered me. That’s why I believe that doing things for passion and fun can be so important in software. You never know when those skills will come in handy.

And beyond that, working on a project by yourself can be a great way to relieve stress and take a break from the day-to-day grind of work, and when done purely for your own enjoyment, you can learn new programming techniques, try out new tools and frameworks, and generally push yourself outside of your comfort zone. What’s more, side projects can be a great way to make connections with other developers and build up your professional network, and maybe even have unconventional learning experiences along the way.

When I first started development on FlyFlyFly, I was working for Amazon, and that technically made it their property, thanks to the terms of my contract with them”, explained Pedro about one of the most unexpected issues of this project. “It was basically a conflict of interests with the IP or so, and that basically made it impossible for me to maintain the game after I left them to work elsewhere, which is one of the reasons I couldn’t keep updating it on Android and iOS. Still, the experience I had with my son figuring out the game and learning how these storefronts work is invaluable.

The-Scio-Spotlight-Talking--Flyflyfly-2

However, a question you might be thinking is why put some much effort into a side project like FlyFlyFly? Well, if you ask any software developer what they love most about their career, they’ll likely tell you it’s the challenge. Building new software is like solving a puzzle — it’s endlessly fascinating, and there’s always something new to learn, but even the most dedicated developers can burn out if they’re not passionate about what they’re doing, which is why this is such an important element of software development; when you’re passionate about the work, all the difficult challenges are worth it, constantly driving you to push yourself to do better.

After all, it’s easy to think that working hard and being passionate means the same thing. After all, if you’re putting in the hours, it stands to reason that you must care deeply about the work, right? But in reality, these are two very different things that need to be balanced carefully: Working hard is a necessary part of achieving success in any field, but to be truly successful, you need to be passionate about what you’re doing. Passionate people are driven by a desire to excel, not just by a sense of duty or a fear of failure; they’re willing to put in the extra work because they love what they’re doing and believe in their abilities. Projects like the game created by Pedro are a great example of this: a fun bonding project that taught him so much pushed him to learn new things, and even was useful to get a project rolling at Scio.

So, if you want to achieve your goals, ask yourself: Are you working hard because you’re passionate about what you do, or just because you think you should be? The answer will make all the difference.

Scio is an established Nearshore software development company based in Mexico that specializes in providing high-quality, cost-effective technologies for pioneering tech companies. We have been building and mentoring teams of engineers since 2003 and our experience gives us access not only to the knowledge but also the expertise needed when tackling any project. Get started today by contacting us about your project needs – We have teams available to help you achieve your business goals. Get in contact today!

The Bus Factor and Nearshore talent: A net positive outcome

The Bus Factor and Nearshore talent: A net positive outcome

Curated by: Sergio A. Martínez

When you’re cooking up a new software application, it’s important to think about the future. We have talked before about measures like futureproofing, refactoring, and how to deal with technical debt to maintain an application in the long run, but let’s look today beyond the product, and think instead about the team in charge of helping it become a reality. And “the Bus Factor” is key in all of this.

What does "Bus Factor" mean?

What does “Bus Factor” mean?

Chances are you won’t be the only one working on the project; at some point, someone will need to pick up where you left off. It happens all the time, as it is not very realistic to expect that the same people that build a piece of software will be around forever to take care of it when the need arises. 

That’s why it’s important to have a robust risk assessment approach to development, identifying anything that could jeopardize the success of a project. This includes both technical risks, such as the possibility of errors in the code, and non-technical risks, such as changes in market conditions. Risk assessment is an important part of project management, helping to identify potential problems early on and develop plans to mitigate them. There are several different methods for conducting a risk assessment, but all involve breaking down the project into its component parts and evaluating each one for risks. 

And when it comes to assessing risk in software development, the Bus Factor is an important consideration to ensure a project not only gets finished but also can be trusted to work in the long run. Simply put, this factor indicates the number of people who would need to be proverbially “hit by a bus” before a software project would be severely impacted and stall. If your Bus Factor is 3, for example, that means that losing 3 people is all you need for the project to fail, so measures to bring that number up become necessary to guarantee a good outcome in development.

As a result, it’s essential to pay attention to the configuration of a team when developing software. By ensuring that team members are aware of the codebase, that collaboration is encouraged, and that everyone is on the same page, you can help to reduce the risk of potential problems down the line.

A bus is always around the corner

The Bus Factor and Nearshore talent: A net positive outcome

So, with proper risk assessment, software development projects can be more successful and less likely to encounter unforeseen problems. That’s why it’s important to increase your Bus Factor; if too few people know how the code works, if the tasks are too partitioned, or if there’s no good collaboration between team members, then the project is at risk. A low Bus Factor can lead to problems when people leave the team, get sick, or are otherwise unavailable, bus involved or not. 

Losing key people during development can be devastating. They can take with them valuable knowledge and expertise that can be difficult to replace, as well as disrupting the workflow and causing delays”, says Adolfo Cruz, PMO Director and Partner at Scio. “However, the worst part of losing key personnel is the impact it can have on morale. When experienced and talented individuals leave, it can be demoralizing for those who remain and damage an organization’s ability to attract new talent. It’s a ripple effect that extends far beyond the immediate impact on the project.

So, when it comes to increasing your Bus Factor, there are two sides to take into consideration. The first one, the technical part, is simple enough: losing people can make it difficult to make changes to the codebase, since there may be no one who understands how it all fits together, and some good practices in project management are important to reduce this risk as much as possible. For example:

  • Use comments liberally. Some programmers believe that comments are essential, while others feel that they only clutter up the code. After all, well-written code should be self-evident, and easy to understand, but in a complex project with many people involved, it never hurts to explain what the code is doing and why. If you need to bring someone entirely new to the project you can easily waste time trying to reverse-engineer some vital functions of the application. So even if the code looks obvious, leaving comments just to be sure it can be understood in the future goes a long way toward ensuring a project can be maintained properly. 
  • Write clear and concise documentation. On the same token, this will help others understand the design decisions behind your code. Without clear and concise documentation, it can be difficult to keep track of the various code dependencies and file hierarchies, essential for ensuring that the project runs smoothly. In addition, documentation can be extremely helpful when it comes to debugging (which may not be done by the exact same team that wrote the code), aiding to pinpoint the root cause of a problem more quickly.
  • Hold regular team meetings. The Agile methodologies in software development have done wonders for team collaboration, offering a way to keep everyone up to date on the project’s progress and ensuring that everyone is on the same page. Additionally, by keeping everyone in the loop, points of failure can be identified before they become a problem for the project, making regular meetings with the team a must for a well-managed development cycle.

By taking these steps, you can help increase your Bus Factor and make it easier for others to step in and continue working on your project if something happens to a key member of the development team. Nevertheless, the challenges of maintaining a project can go beyond the product itself, and with the way development works today, a different approach might be needed.

What happens when the bus is in another country?

Ghost-Colleagues

Software development is a notoriously challenging field, and one of the biggest changes we are currently living through is the normalization of remote teams, an increasingly likely outcome in a post-pandemic world where the advantages of having a hybrid approach and collaborating with external people, have become clear.

However, how does the Bus Factor come into play when your team is distributed over a wide geographical area? With so many options in outsourcing or hiring freelancer developers to collaborate on a given project, management has an increasing challenge in keeping everyone looking in the same direction and minimizing any risk involved in not having direct contact with a team. The challenge is that software development often requires very specific skills to carry through, from programming languages to types of technology being worked on, and the Bus Factor gets lower as more variables are involved in development.

The complexity of a project isn’t necessarily the biggest problem contributing to your Bus Factor; that dubious honor goes to the subject’s specificity. The more specific your topic, the worse your bus factor will be. More specifically, if all other factors remain constant, your bus factor will decrease proportionately to how much specific expertise is required to carry out your work”, explains the blog “How to Beat the Bus Factor (and Be Prepared for Anything)” published by the workflow management company Process. st.

This is especially true when a project requires very specific skills that are hard to find. For an extreme example, imagine you’re working on a project requiring knowledge of a particular software library that only a handful of people know how to use. In such a case, it can be nearly impossible to find someone with the necessary skill set, and in case you do, how do you ensure that person not only remains during the entirety of development but also can come back and help if something goes wrong? Or leaves enough documentation behind so other people in the team can continue? If those questions are a concern, a different approach may be needed.

As the benefits of Nearshore collaboration become more widely recognized, even more businesses will likely choose to partner with developers in Mexico and Latin America”, says Luis Aburto, CEO, and Co-Founder of Scio. “There are many reasons for this trend, but one of the most important is the increased collaboration that Nearshore development enables, letting developers in nearby time zones to integrate easily to a specific project.

The option of Nearshore is attractive if an organization is looking to increase its Bus Factor, guaranteeing a positive outcome in the development cycle. You may have heard of Nearshore companies before, easily confused with mere outsourcing at first glance, but unlike trusting development to an external team (often in faraway locations such as India or China), the Nearshore model offers many benefits, including shorter project timelines, competitive costs, and reduced risks within the same time zone, allowing for a smoother collaboration no matter where in LATAM is the talent you want. 

In the case of Scio, we offer teams of skilled and experienced developers working together, putting collaboration and knowledge-sharing as some of our core tenets. This way, some of the common approaches to increasing the Bus Factor (like cross-training developers in a multitude of skill sets, empowering developers to grow and take on more challenges, implementing Agile methodologies, encouraging close communication at every level, and generally fostering a culture of collaboration and team-focused mindsets) are endemic to Scio, where not only we ensure any onboarding process in a new project is as seamless as possible, but also that everyone is continually learning and growing with new skills, offering knowledge and insight at every turn. In the rare cases, the Bus Factor comes into play, have ready-to-go measures to minimize its impact.

In short, the Bus Factor is an important part of risk assessment in every software development project, and increasing it as much as possible is always the best policy. So next time you or your company is looking into bringing talent to a team to complete a project, think of the best options out there to manage this risk as best as you can. 

The Key Takeaways

  • Risk assessment is important for every software development cycle, and the Bus Factor is one of the most critical metrics to watch out for.
  • In short, the Bus Factor is the number of people that can leave a project before it stalls completely, leading to negative outcomes for development.
  • Good practices can be implemented (like a commenting discipline, through documentation, and having consistent meetings to keep everyone in the loop) can increase the Bus Factor in any project.
  • However, when it comes to working with remote or distributed teams, the Bus Factor can increase depending on the approach of this collaboration.
  • Nearshore development can offer a solution, with organizations like Scio offering the support and culture necessary to ensure collaboration is a success, and a positive outcome can be reached for the project.

Scio is an established Nearshore software development company based in Mexico that specializes in providing high-quality, cost-effective technologies for pioneering tech companies. We have been building and mentoring teams of engineers since 2003 and our experience gives us access not only to the knowledge but also the expertise needed when tackling any project. Get started today by contacting us about your project needs – We have teams available to help you achieve your business goals. Get in contact today!

The Intelligent Edge: A new frontier in how we make software

The Intelligent Edge: A new frontier in how we make software

Curated by: Sergio A. Martínez

The intelligent edge is one of the most talked about topics in technology development today, and for good reason – it represents a shift away from the centralized model of computing that has dominated for so long. But along with this new way of doing things comes new challenges, which need to be addressed if the intelligent edge is to fulfill its potential.

Intelligent-Machine-Economy

Creating solutions at the intelligent edge

But what is the intelligent edge? Is it just a mere buzzword, the same way “the information superhighway” was in the 90s, or it is truly a change in the way we approach technology development? Simply put, the intelligent edge focuses on making applications and services more responsive to local conditions and events by moving computation and data storage closer to the devices that generate and use them. For example, imagine an AI assistant like Cortana contained entirely within your phone, analyzing everything (weather conditions, hotel prices, people density on a tourist spot, available parking space, etc.) as you travel, without the need for a constant connection to the cloud or a data center somewhere. That way, we could have applications that are more responsive, reliable, and secure.

The intelligent edge is an on-premises system that collects, processes, and acts upon data. Typically used within the Internet of Things arrays, the intelligent edge uses edge computing to reduce response times, bandwidth needs, and security risks. Since all the actions are taken on-premises, the data does not need to be sent to the cloud or a data center to be processed”, is the definition given by Insight.com.

And because they’re designed to work even when there’s no connection to a central server, they’re perfect for mobile and distributed environments, a technological paradigm that will become more important moving forward, from retail to healthcare. In retail, you can already see retailers are using the intelligent edge to provide real-time customer service and personalized product recommendations, and in healthcare, it’s being used to monitor patients’ vital signs and provide early detection of potential health problems, and the list goes on. 

In consequence, the intelligent edge is a revolutionary way of utilizing recent advances in artificial intelligence and machine learning, not only an advantage for those who are already ahead but also creating new opportunities by challenging organizations to embrace these technologies wholeheartedly.

A tangible cyberspace?

A tangible cyberspace?

In the future we once envisioned back in the 90s, when the Internet was beginning to gain an important place in our lives, we “entered the Matrix”, so to speak, where a digital reality existed separately from our everyday lives. But what actually happened is that “the Matrix” slowly got incorporated into our physical space; augmented reality, the Internet of Things, streaming services, autonomous machines, IA assistants, and more aren’t meant to transport us to a different (digital) existence, but to bring its possibilities to our daily lives, into our real world. 

 And the intelligent edge is where the physical and digital worlds come together, presenting a whole host of challenges for software developers. As a complex ecosystem of devices, sensors, data, and connectivity, it requires a new approach to development because traditional approaches simply don’t work in this environment. The challenges the intelligent edge presents are numerous, but they can be boiled down to three main areas: data management, security, and connectivity. 

  • Data management. Data management can be challenging because the data at our intelligent edge is often unorganized and distributed.
  • Security. The intelligent edge is a hotbed for hackers and cybercriminals, trying to take advantage of the security measures taken there.
  • Connectivity. Connectivity is a challenge because the intelligent edge is constantly changing and evolving.

These challenges are daunting, but they can be overcome with the right approach to development. After all, the intelligent edge it’s where the rubber meets the road, where developers are pushing the boundaries of what’s possible; it’s all about creating applications that are responsive to users’ needs and context, and that can make decisions on their behalf. It’s about creating software that is truly smart and can help users get the most out of their devices. It’s about creating applications that are always available, even when there’s no Internet connection to rely on.

But even with these challenges, the intelligent edge is the future of software development, and any organization that wants to stay ahead of the curve needs to start thinking about how to design applications to take full advantage of this new paradigm.

Looking for DevOps

Ghost-Colleagues

The set of development practices of DevOps, which bridge the gap between software developers and IT operations while shortening the production cycle, might hold an answer to the challenges of the intelligent edge. After all, the goal is to promote communication and collaboration between these two groups to improve the overall efficiency of the software development process required by this paradigm, and DevOps it’s characterized by a focus on automation, often using tools such as Puppet and Chef which allow developers to spend more time on writing code, and less time on manually deploying and configuring software. 

In addition, DevOps practices often emphasize the importance of monitoring and logging, as this can help to identify problems early on and prevent them from becoming major issues. By bringing developers and IT operations closer together, DevOps has the potential to vastly improve the quality and efficiency of software development, as analyzed in this article by Forbes Magazine

DevOps is the key component to assemble complex embedded software at the intelligent edge. Traditionally, embedded software developers wrote code. When they were finished, and the application had been through quality assurance, the embedded “Ops” (production) installed the systems. This sequential “waterfall” model is too slow for the intelligent edge, which is operating in real-time.”

Thus, when developing software for the intelligent edge, DevOps is king. By automating the software development process, DevOps helps developers create high-quality code faster and with fewer errors, automating the deployment of code to testing and production environments, making it easier to keep track of changes, and ensuring that code is always up to date. As a result, DevOps can help proponents of the intelligent edge move faster and achieve their goals with fewer headaches.

Under the DevOps banner, different embedded developer personas (e.g., platform developers, application developers, operators, data scientists, or DevOps engineers) work in scrums. They push out new software releases as part of agile teams and do it so rapidly that it’s better to integrate the Ops and QA (quality assurance, testing) teams into the development process”, continues the aforementioned Forbes article.

So, as the demand for software that can handle the challenges of the intelligent edge grows, so too will the need for DevOps, which consequently will drive up the demand for faster and more reliable software. That way, DevOps will continue to play an important role in the development of software for the intelligent edge.

Living on the edge with Nearshore

Creating solutions at the intelligent edge

Businesses are becoming more reliant on data, and the need for intelligent edge solutions is only going to grow. However, among the challenges associated with developing these solutions, one of the biggest is finding the right talent. There is a global shortage of skilled workers in the field of software development, and this problem is only compounded by the fact that many businesses are located in developed countries where technological labor demand is high. Nearshore development can help to overcome this by providing access to talent without sacrificing communication or compromising outcomes. 

The resulting collaboration between businesses and nearshore development companies can help to create an ecosystem of innovation that leads to better results, and by overcoming the challenges associated with developing intelligent edge solutions, businesses can stay ahead of the curve and keep their competitive advantage.

In today’s fast-paced world, software development needs to be agile and adaptive to keep up, and by reducing silos and communication barriers between these two teams, DevOps enables quicker and more reliable software delivery”, says Rodimiro Aburto, Service Delivery Manager and Co-Founder at Scio. “In addition, DevOps also brings other benefits to Nearshore software development, such as increased collaboration, better quality code, and improved customer satisfaction, helping businesses respond faster to market changes and stay ahead of the competition, especially when it comes to working at the intelligent edge.

As a result, DevOps is a key ingredient for any successful Nearshore software development team, especially in today’s business world, where the intelligent edge will seemingly become a norm. And for businesses looking to prepare for this paradigm, the answer is spread out across multiple locations in Nearshore collaboration hubs, where teams of experts can work together to find the right solution, and businesses can tap into a wide pool of talent, which can help to speed up decision making and prepare for a new approach in software development.

So, if you’re looking to get ahead in the world of intelligent edge development, make sure you’re using DevOps. It’ll make your life a whole lot easier. As the world becomes more connected, nearshore collaboration hubs are becoming an essential part of doing business.

The Key Takeaways

  • As tech applications move towards a purely mobile environment, a new paradigm in software design approaches: the Intelligent Edge.
  • This intelligent edge will require new solutions to development challenges, mainly the fact that these applications will always be “on”.
  • Frameworks like DevOps might offer a solution to “change the tire while the car is running”, but this presents further challenges.
  • Access to talented developers and engineers will grow, and looking towards Nearshore development is positioned as one of the best solutions around.

Scio is an established Nearshore software development company based in Mexico that specializes in providing high-quality, cost-effective technologies for pioneering tech companies. We have been building and mentoring teams of engineers since 2003 and our experience gives us access not only to the knowledge but also the expertise needed when tackling any project. Get started today by contacting us about your project needs – We have teams available to help you achieve your business goals. Get in contact today!

Good Test Case design in QA: Quality at every step of the process

Good Test Case design in QA: Quality at every step of the process

Curated by: Sergio A. Martínez

Creating software can be compared to solving a big, complex puzzle. A developer needs to take a bunch of pieces (code, algorithms, requirements, deadlines, etc.) and put them together in the right way to create a functioning product that satisfies everyone involved, from clients to final users. And just like with a puzzle, there is no single “right” way to develop software; it depends on the individual developer’s preferences and style, where some may start by laying out all of the pieces and looking for patterns, while others may start assembling pieces and then adjust as they go along. 

Test-Cases-1

And the biggest challenge is that if even one piece is out of place, it can throw the entire system off balance. This is why, besides having a good team of developers able to see the big picture and break it down into manageable tasks, a good QA Tester is so critical to obtaining the best possible outcome during development. Only then can you hope to create a successful piece of programming.

That’s why having a good approach to QA is so important; having experienced testers whose toolset matches the requirements of the product, capable of coming up with a plan for how they will test the code as they write it, as well as having a deep understanding of what “quality” means for the project, is a must in any team. 

So, in that sense, we want to take a look into one of the most important processes of QA: test cases. Because beyond running automated tests and manual testing, QA involves a systematic approach where developers can avoid costly mistakes and create products that meet customer expectations. And in practice, how can you design the perfect test case? What considerations should you have, and what’s the best approach to document and keep track of the sometimes messy process of QA?

Test cases are simple: Just think of everything

When it comes to software development, well-designed test cases are essential. By carefully planning out each test case, developers can ensure that their code will be thoroughly tested for errors, and taking the time to design comprehensive test cases can save a lot of time and effort in the long run. But how should you approach this task in practice? Is there a trick to designing a good Test Case?

It depends on the project”, says Angie Lobato, a Quality Assurance Analyst at Scio with a wide range of expertise in everything QA. “The ISTQB already mentions that 100% thorough testing is not something that is possible, so it comes down to the priorities of the team, the requirements, the severity of the bugs, and the timelines set to deliver the product, as well as how much time the person in charge of QA has.

This is why knowing how to design a test case is so important; considering all the challenges that software development already faces, being able to write an efficient, timely, and thorough test case is a valuable skill, keeping in mind things like… 

  • Thinking about the expected behavior of the system under test. What should it do in various scenarios?
  • Choosing input values that will exercise all relevant parts of the system.
  • Designing tests that will detect errors, but also verify that the system behaves as expected.
  • Keeping track of all tests performed, including pass/fail status and any observations made.

However, saying this is easier said than done; it can be difficult to create comprehensive test cases that cover all possible scenarios, and as software becomes more complex, replicating customer environments to test for all potential issues requires some intuition and minute attention to detail. That’s why the design of your test cases has to start with a script as the basis of the test, documented and shared to see exactly what you are trying to accomplish. For this process, Angie tells us that…

I first need to validate that the Test Case (TC) related to the specific item I’m checking doesn’t exist yet, and do whatever is necessary, like adding, taking out or updating steps to not end up with a suite of repeated test cases”, she explains. “To design the script, it’s always good to create them in their respective suite, with a link to the requirement so everybody in the team can easily find them (I’ve personally used TFS, Azure DevOps, and Jira) depending on the tools utilized during the project. For the script itself, I define the objective of the Test Case, as well as the preconditions and postconditions it needs. Once that has been taken care of, I start to retrace the steps necessary to reach the item I need to test. I add each needed step to achieve the objectives of the test case with their expected result, and finally, I validate the final results where the change needed to be reflected.

As you can see, there’s a lot of documentation involved in designing a test case, and having the proper formats to keep everything in order (like this one) helps to make sure that each test is accomplishing what it needs to. And according to Angie, a good test case needs a couple of characteristics to make it good:

  • A good test case has a clear objective stated and is updated to the latest version of the project. 
  • Has all the necessary testing data to execute it without creating repeated information. 
  • Has defined all the preconditions and postconditions of the product. 
  • And most importantly, don’t try to test more than one thing in a single case.
  • However, if you need to, changing the parameters of the test is necessary to make that clear. 
  • An ideal test case shouldn’t have more than 10 steps in total.

Ensuring quality at a distance

Test-Cases-3

As anyone who has ever been involved in software development knows, QA is a critical part of the process, and a good test case can help to ensure that the final product meets the requirements of the customer and is free of issues, especially in the current development landscape where remote collaboration is becoming a given. 

For a Nearshore development team like the ones at Scio, a well-crafted, carefully designed test case is invaluable, helping to ensure that the team and the client is on the same page concerning the expected results of the testing process, and providing a clear and concise way to communicate those expectations to everyone involved. 

In other words, a good test case can help to streamline the testing process and make it more efficient, so taking the time to create a good test case is well worth the effort for any remote software development team. 

Any company that outsources software development knows that collaboration is key to success. A good QA team is essential to ensuring that the final product meets the standards”, says Adolfo Cruz, PMO Director, and Partner at Scio. “In a Nearshore setting, they are especially beneficial because they ensure that any problems are found and fixed quickly before they have a chance to cause major problems. As a result, well-designed test cases play a vital role in ensuring the success of a remote relationship.

The Key Takeaways

  • Quality is necessary at every step of the process of developing software, not only a concern in the final product.
  • A good example is test cases, how important they are to the process of QA, and what good practices get involved in designing one.
  • A well-designed test case is straight to the point, meticulous, and tries to think of all the context around the product in order to ensure the best quality possible.
  • Also, the process of designing a good test case is doubly important when working on a project remotely, helping keep everyone on the same page and track all the changes and corrections necessary to bring the best possible outcome. 

Scio is a Nearshore software development company based in Mexico where we believe that everyone deserves everyone should have the opportunity to work in an environment where they feel like a part of something. A place to excel and unlock their full potential which is the best approach to creating a better world. We have been collaborating with US-based clients since 2003, solving challenging programming puzzles, and in the process showcasing the skills of Latin American Engineers. Want to be part of Scio? Get in contact today!