Skip to main content

Our Insights

The team list

Building a team? We got you. Get the best tips and how-to´s weekly on your inbox.

I was introduced to software development during a coding Bootcamp in 2018......

I was introduced to software development during a coding Bootcamp in 2018. Over there, I was amazed by the simplicity of the Ruby on Rails framework, especially the MVC pattern. It was very simple: the model was in charge of communicating with the database and retrieving all the necessary data. The controller was responsible for responding to user actions, asking the model for the data the user was requesting, and sending it to the view, which was responsible for rendering what the user would see in the browser simple and plain HTML.

Suddenly how the web worked made more sense to me. After a couple of projects, I started to want more interactivity in my websites (after all, I was a user of other products, and the bar for quality was high). That was how I met JavaScript and AJAX. I was fortunate enough to learn JS in the ES6 era, so I was able to achieve most of the things I wanted with sprinkles of vanilla JavaScript. With time, it started to get messier. I learned about REST APIs and Single Page Applications frameworks, but I always felt that it was dirtier than the initial Ruby on Rails simplicity I was introduced to.

I never really dove into the SPA wave; I learned the basics, but for my entrepreneurial venture, Rails was more than enough. Nonetheless, after most of my startups failed, I had the opportunity to work with very talented people who knew the SPA business very deeply. I went through the migration from a Rails monolith to a decoupled Frontend and Backend architecture with them. I would love to say the migration went flawlessly, but I saw how the complexities of the new architecture affected everything from the product itself to the development and engineering process in a small team like ours.

I experienced firsthand the problems with cache when a new release was out and the user did not refresh the page: the slow performance of the first print due to the need to load a big chunk of JavaScript on the first request, the complexities of managing state, the increased difficulty of debugging issues between two codebases and the decrease in deployment speed. At the same time, frontend engineers waited for the backend engineers to perform a change. It was messy.

On the other hand, I was closely following Rails development. I saw how Rails stayed on the sidelines when frameworks like React and Vue started to emerge. Instead, they launched Turbolinks, but that did not go as well as expected. Lots of Jquery code broke. They kept working on it and improving it, and after that, they launched Stimulus JS, a great minimalistic framework that paired beautifully with Turbolinks (I adopted it very early on). But still, if you wanted a very interactive interface, you ended up writing way too much custom JavaScript. But at the end of 2020, things changed. With the release of Hotwire, the puzzle was completed. The best of the Rails framework without sacrificing any interactivity on your apps and all of this with 80% less Javascript writing than usual. Mind-blowing!

So how did they achieve such a fantastic result? The reality is that, as with any great innovation, the process was very iterative. All previous attempts of avoiding Javascript complexity finally paid off. To understand this, let’s try to explain the foundations of the most basic concepts of Hotwire:


Turbo: Turbolinks on Steroids

It is the heart of Hotwire; most of the magic is here. Turbo provides four complementary techniques that help you speed up page changes and form submissions without writing any custom JS, divide complex pages into components, and stream partial page updates over WebSockets.

Everything starts with Turbo Drive (AKA Turbolinks), which is an interceptor for all link clicks and form submissions, that instead of reloading the page, performs requests in the background and then replaces the body (and merges the head) of the document with the returning HTML from the server. This single approach increases the page-level navigation speed a lot because you do not have to reload all the assets, and the speed at which a browser can process HTML is very similar to the speed at which it can process JSON.

For the pages that you do not want to reload completely, you now have Turbo Frames. They work similar to Turbo Drive, but instead of replacing the complete body, you have the ability to encapsulate small parts of the document that can perform individual requests to the server and replace only the content of the matching frame. For example, you can replace an edit button with the form for editing, using the same template for the edit form as if you were visiting the editing page instead. An approach that works great with HTTP/2 and caching.

Turbo Frames are great when we work with direct interactions within a single frame, but what about when we need to update other parts of the pages outside of the Frames? Well, then we can use Turbo Streams. This technique allows us to stream HTML changes to any part of the page in response to updates sent over a WebSocket connection.

These three concepts can take you far, but sooner or later, you will need some customization, and that is what Stimulus JS is for.


Stimulus: A JS framework for the HTML you already have.

Stimulus allows you to connect JavaScript objects to elements on the page using simple annotations. You know that moment when you add a CSS class and the element magically changes position, shape, or color. For me, Stimulus is the same concept but with Javascript instead of CSS. You just need to link your existing HTML with it, and then the magic happens, no query selectors and no need to generate the whole DOM dynamically from Javascript itself. 

The most exciting part of all is that it monitors the DOM for changes. For example, if a Turbo Stream was sent or the content of a Turbo Frame changes, the newly added HTML will connect with its corresponding Stimulus controllers and add the needed functionality immediately. No page reload is needed, and no need to listen for fancy Turbolinks load events.



The development of Hotwire and the enhancements coming to the Ruby on Rails framework are both exciting and refreshing. In a way, it feels like the first time I was introduced to the MVC pattern, a very simple yet powerful approach for building web (and now even mobile) applications without the well-known complexity of building a compelling SPA. 

I encourage anyone reading this, to try these new technologies and rethink the need for complex front-end frameworks. Finally, another path can take us to the same level of interactivity with a fraction of the complexity. It is on us to keep fighting for a world with better frameworks and techniques.

I recommend this approach to you, especially if you have a small development team or you are an indie hacker building stuff on your own. I guarantee you can go 10x faster this way, and you will end up with much better user experiences because of this.

What do you think? Is the web going to be built with more or less JavaScript in the future?

Thanks for reading. Please feel free to share and don’t forget to subscribe to our newsletter below!

As Graphic Designers, we are often the first bridge between a project’s concepts and its earliest visual assets...

As Graphic Designers, we are often the first bridge between a project’s concepts and its earliest visual assets, and because of this, we must be completely mindful of our client’s goals. The easily overlooked second point is that understanding the capabilities of our own team — and how this translates into time, effort, and resources — is just as essential.

Of course, getting used to this only comes through time and experience itself, but there is one key skill we can cultivate to ensure we’re all on the same page: Active Listening helps us understand what others are thinking, not as words forming sentences, but as concepts building ideas. We can then translate these for everyone involved in the process; the white space you just described to your client is best understood by your team’s Frontend Developer as a 250px padding on top of a new section and as a consistent breathing space for QA to keep an eye on every new page of the App.

That’s where Contextual Translating comes in. Translation entails not only knowing multiple languages but also understanding multiple contexts. This is why learning a thing or two about HTML, CSS, and other coding languages is always a bonus for designers: experience in various environments is key to fully understanding the meaning of what’s being said and implementing the correct translation.

It may appear simple as all you have to do is learn and listen. In practice, it gets tough because you might have to deal with multiple translations at once, and you can end up thinking of solutions midway through instead of actually paying attention to what is being said — but don’t fret! That’s part of learning. Knowing when you’re slipping is one of the steps towards improving your Active Listening skill, too.

Here are a few more tips to get there:

Get a coffee with a friend — then actually listen to them while drinking it.

Talk about any topic with your friend, then make a brief explanation of what they just said using your own words, trying to match their ideas. It doesn’t matter whether you have it right or wrong; what’s important is that you practice listening and rewording, which you’re going to be doing a lot in this scenario.

Talk design to people who don’t do design.

Find ways to describe common design concepts without using niche-based words, such as typography, image ratio, or even pixels. Your average client may not be aware of what these words mean, so you must describe them in a way that they can understand — that, without misleading them. A common example happens when discussing the “size” of an image: you may be referring to its dimensions (height and width), but the receiver could be thinking about the amount of data it takes up on a hard drive (kilobytes, megabytes). In the end, they are both “sizes,” so which one are you referring to? This same idea leads to a third point…

Don’t give ambiguity a chance.

Paraphrasing is not a bad practice. In fact, it is often encouraged in many contexts to welcome expansive writing in order to explain the information being conveyed more thoroughly. (See what I did there?). Talking with clients and teammates is not one of such contexts, though, and relying on terms that are far too open to multiple interpretations can and WILL lead to inexactness, which is the first step down the dooming “redesign tunnel.” Try rehearsing what you’re going to say while paying attention to the words you’re using: is this the right way to describe what you’re trying to explain? Use Google to find meanings and synonyms, and most importantly, don’t place the entire weight of a sentence on a single term; make sure to spend some time describing and contextualizing keywords so that when you use them, there are already many hints of what these words mean, leading to an easier understanding.

Even though correct communication is a crucial component of efficient design, you’d be surprised at how often we struggle to consciously incorporate these fundamentals into our work. These tips act as small shortcuts we can easily keep in mind to ensure we convey the correct message, but there are numerous books out there that explain these and many more concepts in greater detail. There’s no reason not to learn about communication; it’s one of those all-around, super-effective skills that everyone should hone, regardless of their occupation.

Thanks for reading. Please feel free to share and don’t forget to subscribe to our newsletter below!

In this blog post, we will look at how to solve a simple problem with a Python program, and then we will try to speed...

In this blog post, we will look at how to solve a simple problem with a Python program, and then we will try to speed it up by using Python’s multiprocessing module.

The main goal of this post is to illustrate how a program can be made much faster by parallelizing work through multiple processes, as opposed to running the whole workload through a single process.

Problem introduction – TCP port scanning

The problem we will be trying to solve is known as TCP port scanning. The problem consists of finding open TCP ports in a given IP address. Such a process could be used by network administrators to identify potential risks in their networks and by attackers to attempt to gain control over exposed systems.

TCP ports are represented in 16 bits, so we have a maximum of 65535 ports per IP address. Port 0 is reserved and cannot be used, so we will focus on the range 1 to 65535.

Given a hostname such as, a start-port, and an end-port our program will have to find the IP address of the given hostname and then print all open TCP ports in the given range. 

In order to do this, we will have to make our program iterate through all ports from start-port to end-port and on each step attempt to establish a connection through the current port. If the connection can be successfully established we know the port is open, then we will print a message to let the user know.

A simple single-process solution

Let’s try to create a simple Python function using the socket module. This function takes an IP address and port number as inputs. It returns True if the port is open, and False otherwise.

The function is very simple. First, it wraps its calls inside a try/except block. It then tries to create a connection to the specified address and port. If this connection is successful it will immediately close it and return True, letting us know the port is open. If any problem occurs and the connection cannot be established it will return False, letting us know the port is closed.

The value of timeout=1 is needed to allow our program some time (1 second in this case) to establish the connection. If after 1 second our program can’t establish a connection we will assume the port is closed.

Now let’s wrap our function inside a complete program by reading some command-line arguments and printing appropriate messages. We will use argparse for argument parsing and time to measure execution time.

This is how our program works. When executed it reads the –hostname, –start-port and –end-port arguments. If a port range is not specified it will default to all ports, 1 to 65535. It then creates a variable called start_time to store the current timestamp in seconds, executes the scan_host function, and finally prints the elapsed time in seconds.

The scan_host function first translates the given hostname to an IP address, then iterates through all ports in the specified range and calls our initial is_port_open function for each port. If it finds an open port then it prints a message.

Let’s name our program and save it.

Scanning 500 ports

Time to do some tests! Let’s see how long it takes to scan through 500 ports.

So our program works just fine and we were able to find two open ports. However, scanning 500 ports took 500 seconds. This is something we could have predicted given our 1-second timeout per connection attempt.

Given this, if we wanted to scan through all 65535 available ports, our program could take 65535 seconds to complete, or a little over 18 hours.

If we don’t have all day to portscan a single host, one thing is clear: our program must run faster.

One thing which comes to mind would be lowering our timeout value, but this could compromise accuracy. TCP connections need some time to establish, and not giving our program enough time could result in wrongly assuming some ports are closed when in reality could simply take some more time to accept a connection.

A better approach to speed up our program would be to try and connect to multiple ports at once, instead of trying a single port at a time. Fortunately, we can achieve this by parallelizing our workload across multiple processes. This is when multiprocessing comes to the rescue.

Speeding things up with Python’s multiprocessing

Python’s multiprocessing module provides a set of classes that allow to spawn subprocesses from a program’s main process. We will look at how we can use the Process class to speed up our port scanning program.

First, let’s modify our scan_host function to take a new workers argument and spawn a set of processes to divide the workload.

Let’s look at the different parts of our new function.

The new argument workers indicate how many subprocesses we want to launch. So given start_port and end_port we can calculate the total number of ports to scan and then divide this number by the amount of workers we will be launching:

At this point, we can iterate through our port range and compute the start_port and end_port of each one of our workers.

So to illustrate this with an example, if we give our program the following inputs:

Then the workers would be set up with the following arguments:

Now in each iteration, we can create a new instance of the Process class to spawn a new subprocess with the given arguments. We will then start the process and store it in our processes list.

When our workers launch they will call the function provided as the target argument of the Process constructor. In this case the function is scan_address. We will look at this function later.

Finally, we will call Process.join on each process to wait until they all finish.

Now, let’s put all pieces together into a new program.

Let’s name our new program and save it.

Scanning 500 ports again

Now that we have what should be a much faster port scanner, let’s try scanning 500 ports again. This time we will launch 10 parallel workers.

As we can see, with 10 parallel workers we just gained a 10x improvement in execution time!

Last time, with a single process, it took 500 seconds to scan through 500 ports. Now with 10 parallel subprocesses, it takes only 50 seconds.

Scanning all ports of a host

Now that we have such a fast port scanner we can push things to the limit. Let’s try scanning all 65535 ports of a host with 100 parallel workers.

We were able to scan all ports of this host in just 131 seconds and have found four open ports.


We have looked at how to solve the TCP port scanning problem in Python. We initially looked at a simple single-process solution and then learned how to speed it up by using Python’s multiprocessing module.

We have learned how dividing the workload between a set of parallel workers can offer massive improvements in execution time.

Many computing problems can be parallelized like this, and now that you know how to use multiprocessing you have added a valuable tool to your toolbox. It is now up to you to apply it wisely.

Happy coding!

Thanks for reading. Please feel free to share and don’t forget to subscribe to our newsletter below!

In a world full of continuous disruption, the IT business is one of the fastest-growing and most competitive markets...

In a world full of continuous disruption, the IT business is one of the fastest-growing and most competitive markets. When candidates have to decide which software company is the best fit for them, they consider competitive salaries and who offers the best cultural environment.

Over the years, we have learned that a company’s culture is essential to attract and retain top talent, and it starts in the recruiting process.

“Culture is what motivates and retains talented employees.”  – Betty Thompson 

We consider it essential to share our values and perks and give them a sense of what working with us would feel. We want them to feel comfortable and supported from the beginning. It’s also beneficial to keep them in the loop throughout the whole process; it gives them a sense of belonging.

Employees want to know they are working in a company that cares and values them as professionals and human beings. It’s not all about hard work; keeping the mind and spirit happy will motivate them to deliver outstanding results.

“Culture isn’t just one aspect of the game -it is the game. In the end, an organization is nothing more than the collective capacity of its people to create value.” – Lou Gerstner

Culture, Communication & Fun

Before the pandemic, playing video games and having an occasional beer was part of our office culture. Since we are all working remotely now, our cultural approach had to adapt to the circumstances. As the Marketing and Happiness officer at Ideaware, I believe we have found the perfect balance between taking care of our team’s energy (from a safe distance) and do what we love the most: develop products.

Let me tell you how!

  • We keep our team informed: Monthly town halls and newspapers keep everyone in the loop. We know what we are working on, what’s happening with the company and in our co worker’s life.
  • Strong relationships: On day one, our new members meet the team. Creating a solid connection is essential; we want everyone to feel welcome and part of this big family, and most importantly, we are here to collaborate.
  • Time to unwind: We have multiple 30-minute events throughout the week to connect, learn and have fun together. These spaces are essential after a long workday. They keep us bonded even though we are working from our own houses, plus who doesn’t like to have a good laugh and a beer/cup of coffee with the team after a busy day?
  • Open communication: Whenever our team has a question or an idea, we have an open doors policy. We are ready to listen and support them to reach their goals.

    The team also has multiple slack channels where they stay in touch and share work and non-work-related stuff. It’s all about balance.

“Create the kind of workplace and company culture that will attract great talent. If you hire brilliant people, they will make work feel more like play. “ – Richard Branson

Company culture needs to constantly evolve in order to improve, especially in the IT industry. Listen to your team, provide spaces to relax and have fun, encourage them to keep learning, communicate often, and share a good beer. These are key to attract and retain top talent.

Thanks for reading. Please feel free to share and don’t forget to subscribe to our newsletter below!

Software projects are in a boom moment; any person working in a tech role has experienced this feeling of having...

Software projects are in a boom moment; any person working in a tech role has experienced this feeling of having selected the correct path. Not just because there is a high demand in this kind of job openings but because of the diversity of projects you can get involved in and the emerging wave of tools that you can take advantage of to keep improving and learning. 

More than ever, we are involved in a changing world, which is reflected in software projects. Then,  we as team members need to be agile and keep shifting/evolving faster. But how to keep up in a fast-paced environment and survive to tell the story?

From a Quality Assurance Analyst and Project Manager perspective, here are some tips that have worked for me so far:

1. Take advantage of the existing frameworks

We all have heard about SCRUM, LEAN, Kanban. Even if you are working specifically on one of these frameworks, always keep using the best of each one: the visibility and transparency that provides a Kanban board, the ability to identify and minimize the waste of time from LEAN, and the flexibility and continuous feedback of SCRUM, you could also use a Fishbone diagram to identify issues causes. The list goes on!

2. Transparency

Transparency is one of the SCRUM pillars that I consider incredibly relevant. It helps us to avoid suffering from micromanagement and misunderstandings. Make visible what you are working on and the status (use tasks, for instance, most of the boards allow you to create tasks under a User History/Card). So, any team member will be aware of the amount of work the team is carrying on and what each team member is doing. It helps to identify redundant and time-consuming activities as well. So, it looks like an opportunity for LEAN principles to identify the causes and improve/avoid wasting time.

3. Communication

In a fast-paced environment, it is easy to miscommunicate. Everything happening simultaneously, and many people trying to collaborate to make a better product could be overwhelming sometimes. Just breathe, get organized, do it quickly; find a way to iterate in the feedback, and make sure the whole team is 100% focused on what is happening with the product, events, deadlines, etc. That will make it easier to react smoothly to the constant changes.

4. Ask Questions and anticipate

Asking questions on a project has always been essential; I mean, someone has to ask the questions, right? Why don’t you?. It will lead to a better understanding for you and the whole team. When you anticipate the right questions, it clarifies the requirements, the insights needed, and the lacks.

Create a culture of clearing up doubts by asking questions. It is always better and time-saving to ask questions at the correct time, preferably at the beginning.

On a final note…

Everything in the tech world will keep changing, whether you are working on a huge product or in a bunch of small products. You are already involved, and this will not stop, so we better keep learning from the books and, more importantly, from experience. Always keep in mind the lessons learned, checklists, or any other helper that comes in handy for you and your team. It is a work in progress for me, and I guess for each one of us. So keep going! 💪🏽

Thank you for reading, and do not forget to share and subscribe to our newsletter below. If you have any questions about our processes, we are here for you. Contact us!


"A black box that does magic tricks " . Maybe that's the idea that many of us have about machine learning,...

“A black box that does magic tricks 🦄” . Maybe that’s the idea that many of us have about machine learning, especially if we have never had an approach to artificial intelligence. But the reality is that artificial intelligence is becoming more and more relevant in almost every branch of engineering and development, including the web.

But not everything has to be rocket science, right? So let’s take a look at some scenarios where machine learning could take our web applications to the next level 😉

Let’s analyze the data!

This is one of the machine learning applications that comes to mind most quickly: taking the large amount of data we collect and using specialized algorithms to discover patterns or inconsistencies. This analysis of the information can be used to make changes almost in real-time.

It’s time to understand user behavior! 👀

Your web application can use machine learning to accurately understand user behavior. For example, an e-commerce website can apply ML algorithms to monitor and understand a user’s affinity with a product or category. It could even predict expected user actions based on search history and interaction within the results page. Better results and more accurate recommendations can mean more sales and more time the user spends on the website.

Did you know that by using machine learning you could optimize your response times? That’s what the page forecasting model is all about: predicting the next page the user will visit using historical data from Google Analytics. Through this prediction, you can apply techniques to navigate faster. 

Where is my 21st-century user experience? ⏳🔊🖖

Web technologies in the 21st century have already evolved to an impressive level. There are already several APIs based on artificial intelligence within browsers* that enable alternative and adaptive experiences. 

One example of these technologies is the Web Speech API:

“The Web Speech API adds voice recognition (speech to text) and speech synthesis (text to speech) to JavaScript.” -Eric Bidelman (Web apps that talk – Introduction to the Speech Synthesis API)

You can create applications that are voice-driven or that integrate voice recognition into forms or search boxes as Google or YouTube do.

The Google search box has integrated speech recognition provided by the browser.

Please note that several of these technologies are not fully supported by browsers. For example, Safari supports Speech Synthesis but does not support Speech Recognition.

But wait… audio isn’t everything. The camera can also be used to play/experiment with the user using ml5.js: “machine learning for the web in your web browser”. Through ml5.js we can use a variety of models. For example, PoseNet or Handpose, for real-time pose estimation (let’s play using our body!). The Coding Train has an introductory video that I recommend: ml5.js Pose Estimation with PoseNet.

Handpose in action ✊✋

Artificial intelligence is an exponentially growing trend. Every day we see it more and more in web development. Let’s take advantage of machine learning to make our application an unforgettable experience. Happy hacking!

Thank you for reading and do not forget to share and subscribe to our newsletter below. If you have any questions about our processes, we are here for you. Contact us!


The world has changed and we have evolved with it. Now that our team is working remotely...

The world has changed and we have evolved with it. Now that our team is working remotely, finding a way to successfully integrate your new hires into your team is our top priority. We strongly believe a thriving onboarding process is essential to guarantee high retention.

Our team makes sure you do not have to worry about culture/onboarding anymore. We take care of everything while you spend more time working on your project goals.

As you know, we went fully remote during these crucial times and we found a way to set our remote onboarding process up for success. Do you want to know our secret?

A collaborative process.

The days where HR was fully responsible for the onboarding are over. Now, we all are an essential part of it since social interaction has become key to facilitate the adaptation process of our new members. Our goal is to integrate your new members into their positions, remote team, and our warm and friendly culture as quickly as possible, making them feel at the office even though they are working from home.

Onboarding remote team members successfully 

The sooner new team members feel part of your project, the better their performance will be in it. Let’s take a look into this process:

Getting ready

It is important to start setting new team members before their first day. We understand that starting a remote position could be challenging and we want them to be already familiar with the team and processes, this will help them feel ready and relaxed on their first day. 

We start with a video call with the new hire and our management team, this way we can introduce ourselves and they will know exactly who to talk to. We make a summary of who we are, our mission and vision, culture, and perks, provide them with a company email, and arrange the delivery of a new desk, chair, computer, and a welcome package to their house. We also tell them about our weekly activities and events that will help them establish a relationship with their coworkers and feel welcomed.

The first day

The day we were waiting for is finally here! The most important thing is to integrate the new hire(s) into our team. Via Slack, the app we use for internal communication, we share a picture of them, their role, and a welcome message that all team members have access to.

Then, they are introduced to the members of your project via Zoom. During the call, everyone has their cameras on as seeing people’s faces builds a great social connection. Your team introduces themselves, talks about the project, and gives the new member a product roadmap and the information needed to start achieving outstanding goals.

2-weeks check-in

After giving the new hire time to get used to the role, our HR team schedules a meeting 2 weeks after the start date. During this follow-up, we want to make sure that they are doing ok, that they have all they need, how they are getting along with the team, and if they feel happy and comfortable. We want them to know we are here to support them to achieve their goals.

Culture as the main ingredient

The happiness and success of our team is also a top priority. During the last year, we have worked hard creating a remote culture that makes everyone feel welcomed and included. 

To make this happen we host weekly events such as Coffee Breaks, Homespaces, Town Halls, and team challenges; these events are the roadway to virtually connect with our team and create an environment where we all feel safe to share our ideas, knowledge, and just have fun. We understand the importance of having a good work/well-being balance, therefore, we use this time to disconnect, relax, have fun, and share a few laughs with our coworkers. It is healthy!

Virtually meeting your colleagues and getting to know their faces creates a feeling of friendship and closeness, which is incredibly important for the success of the onboarding process and your project.

Experiences of our newest team members

“My onboarding process was great, keeping in mind that it was remote because of the pandemic. I had the zoom calls needed to meet all the Ideaware’s management team and the team I was going to be part of; they were all very helpful in explaining to me their roles. Getting all the proper documents and forms signed online was something I particularly liked because I received a copy of the documents right away in my email. I found it very innovative. Ideaware also gave me a new computer to work with and they delivered it to my house. They were amazing with the communication and letting me know they were here for me in every step of the way.” – Silvana N.

“The onboarding process has been so good! From the beginning, Ideaware and my team were very clear with the tasks that I was going to develop. Also, I have felt very well received by the company. I feel that I have been given the proper treatment as a worker, which generates a sense of belonging to the company.” – Esteban E.

Collaborative onboarding has been the key to successfully integrate your new hires into our team. Even if they are 600 miles away in another city, we are all part of this process. The best part is that we take care of everything, so you have more time to spend working on achieving your goals.

Thank you for reading and do not forget to share and subscribe to our newsletter below. If you have any questions about our processes, we are here for you. Contact us!


What a year it’s been for everyone. Things were going smoothly until March and then everything changed...

What a year it’s been for everyone. Things were going smoothly until March and then everything changed. Covid-19 hit us and we were forced to change absolutely everything about how we live and work. We had to learn new ways to cope, stay safe, and take care of our mental health.

And yet, as the world came to a crawl, we started adapting, and as an industry, we found a new rhythm.

Our remote work timeline went from 2 years to 2 weeks

We had a vision, and a timeline to shift Ideaware to a 100% remote company by 2022. We had just started drafting plans when, well, you know what happened.

Sending everyone home to work, making sure they had everything they need to be productive, and coming up with processes was no easy task. For the first few weeks of our lockdown in Colombia, we were hard at work adapting.

We realized that our remote Fridays were a whole different ball game than remote work lockdown.

Eventually, we figured things out. And so did our customers.

I’m happy to say things are positively moving forward for our team and our customers, we’re now making plans to never require anyone to work at our HQ for 8 hours a day again.

Remote is here to stay for us. Most of our customers are not only also working remotely but many were already distributed before the pandemic, so this has made the transition easier for everyone.

With hard work, we’ve adapted

Most of us in the industry were already seeing remote as the future of work, but now that future is here. We’ve established new processes and new perks for the team to adjust to this new world.

We also now help every single team member (new or old) set up their home office. Ideaware provides desks, equipment, and subsidized internet for everyone.

Clients and team members

We are saddened by the global tragedy this year, we are also very grateful that 2020 has been a year of growth for us.

Since April, we’ve signed on 9 new clients whom we are currently building their software teams here in Colombia. We’re now hiring all over the country and this has made our expansion easier.

26 team members have joined us since April, and we’re very excited to have every one of you on board, keep rockin’.

Making our clients successful is our top priority, this year we’ve helped our customers make over USD 50M in revenue. That is huge for us, and for them.

Activities and team bonding

Along with our new processes and perks, we also had to move all of our learning and team bonding activities online. We’ve come up with:


A place where anyone on the team can teach all of us anything they want (whether it’s industry-related or not).

Town halls

We get the entire team on a call and share company news, policies, and exchange a laugh or two.
We’ve also got together for some fun bonding activities:

Mario Kart Tournament

Friendship Day: Homemade Bread and Coffee

Halloween Cocktail Party

Santa’s Baking Workshop

2020 – a year of learning, change, and growth

Change is inevitable and this year takes the prize. We are grateful for all the opportunities that we’ve had this year, and especially very, very grateful to our old, current, and new clients (who we really consider partners) for trusting us. We trust you too and here’s to many years of partnership.

To our team – thank you. Thank you, and thank you again. This year has not been easy on you or your families. But we’ve stayed together, we’ve learned and now we’ve grown together.

“When we least expect it, life sets us a challenge to test our courage and willingness to change; at such a moment, there is no point in pretending that nothing has happened or in saying that we are not yet ready. The challenge will not wait. Life does not look back. A week is more than enough time for us to decide whether or not to accept our destiny.”

Paulo Coelho

Thanks for reading, hope you liked this post. Please feel free to share and don’t forget to subscribe to our newsletter below!

Recruiting software development talent is a particularly challenging art, but done in the right way, it becomes very...

Recruiting software development talent is a particularly challenging art, but done in the right way, it becomes very rewarding.

We understand that finding the right talent for your project is time-consuming and demanding. At Ideaware we make sure you don’t have to worry about that. Hiring an outsource/nearshore software team is meant to be easy and headache-free.

“In technology, it’s about the people. Getting the best people, retaining them, nurturing a creative environment, and helping to find a way to innovate.”  -Marissa Mayer

From profiling to hiring

We want to make your vision a reality. To make this happen, we’ve crafted a repeatable process, with an extraordinary technical team to find the talent to meet your needs for “skill and scale.”

Stage 1: Preparation

Let’s get started!

Whether you are scaling your team or hiring a dedicated team, the first step is to identify the requirements of the position you need for your project. After the vacancy request is made, our Human Resources team will begin to work its magic. 

We use a collaborative recruiting method, which means that with our tech leads, we create the right job profile of required competencies and skills based on your needs. From this moment, we use our recruitment techniques to spread the message and the head-hunting starts.

Stage 2: Prescreening

This phase consists of selecting, organizing, and identifying cream-of-the-crop candidates by reviewing the applications. When we have selected the profiles that meet the requirements, the screening process starts with a call to each applicant. 

Here comes the fun….

Stage 3: Technical Interview

After the screening process is done, our HR team and tech leads schedule an interview with the very best candidates. We conduct a series of questions, challenges and evaluate their creativity, ability to problem solve, and culture compatibility. In the end, our tech leads give us the evaluation form with a score and feedback.

Stage 4: Job simulation exercises and final interview

Here is when you come to the mix! We share with you between 2-4 top-talent candidates with their job profiles and technical results. You review and select the ones you believe are the best fit for your project, and we will schedule your interview with them.

During this final interview, we conduct a work simulation challenge. This will help us to check the candidate’s expertise, qualifications, and understand how they will react in a future work situation. 

Stage 5: Offer and hiring

After you select your A+ candidate and give us the green light, we make an offer and our HR department starts with the hiring process. We take care of the rest.

You are all set!

Nothing but benefits…

These are just a few reasons why you should hand-off this process to us:

  • You don’t have to worry about contracts anymore.
  • You will have more time to focus on your project while we focus on finding the right talent.
  • Our experts will put together a team that goes with the personality of your project, culture, and fit your expectations.
  • The days when you had to spend endless hours screening candidates are over. Now you can spend this worry-free time centering your attention on your goals.
  • You will just interview and screen candidates that are already aligned with your requirements.

“Hiring talent is a multi-faceted skill that lies at the crossroads of social networking, technical acumen, process management, and intuition.”  -Hyam Singer

Remember that hiring is a journey and we are here to help you along the way to build the right dedicated or extended development team exactly to your needs.

Thanks for reading, hope you liked this post. Please feel free to share and don’t forget to subscribe to our newsletter below!

Let’s chat, we’re user friendly!

Thinking about starting a team? Need to augment your existing team?
We’re here to help. We work with US based companies to help them grow!

You’ll be talking with
Max, our CEO.

The team list

Building a team? We got you. Get the best tips and how-to´s weekly on your inbox.


© 2021 Ideaware Co. With ❤️ from Barranquilla, Colombia.