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.

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 www.google.com, 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 port_scanner.py 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 port_scanner_parallel.py 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.

Conclusion

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:

Homespace

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!

We invest a lot of time at our jobs. Now that we’ve shifted to working from home, we must interact more with our...

Who wouldn’t want to work in a place where they feel happy, safe, and valued?

We invest a lot of time at our jobs. Now that we’ve shifted to working from home, we must interact more with our coworkers to keep things moving and our minds sane. Being happy and having a healthy work environment is vital not only for our mental health but also for our productivity. Unlike what most people might think, creating a good work environment is not only the sole responsibility of supervisors and/or senior management teams. It is the responsibility of everyone involved in an organization. 

But how can we contribute to having a happy and healthy work environment in such hectic times, when we have deadlines to meet, goals to be achieved, and still, balance all of that with our personal lives and responsibilities? Well, you might be surprised, because it’s not as hard as you might think, and it depends a lot on ourselves as well. 

These 7 tips are fundamental  to create an environment that will, for sure, make you want to wake up every day to go to work:

  1. Respect everyone: Treat others as you would like to be treated. We have heard these words so many times before; but are we living up to them? Having due regard for other people’s rights, feelings or wishes is the root of peace.
  2. Effective communication: Have you ever stopped to think about how many misunderstandings and problems could have been avoided in life if you had communicated properly? The same thing happens at work. Communication is much more than just transmitting information from one person to another. It needs to be accurate, effective, and clear. Effective communication will build trust, will provide clarity and direction, and most important of all, will create better relationships between coworkers and supervisors.
  3. Take breaks during your workday: Long hours in front of the computer is anything but healthy and does not translate into productivity or faster achievement of goals. Try to make a pause to stretch your body and muscles at least twice a day for ten minutes each. You will soon start to feel the benefits this brings, not just to your body, but also, to your ability to concentrate at work.
  4. Avoid gossip: Avoid negative conversations, gossip, and unhappy people. Live your own experience, and if you find yourself in a difficult situation, use the appropriate channels of communication established to try to come to a solution. Remember that communication is key to a happy and healthy work environment.
  5. Be kind: Kind is the new cool. We don’t always know what people who work with us are going through. Take your time to get to know them. Try to make at least one person smile at work every day. You will see how this simple act will change not only the other person’s day but your day as well. Good acts cost nothing and make a huge difference.
  6. Help each other out: Be that person you would like to have by your side when you’re in trouble. Organizations are all about teamwork and building experiences together. Your coworker’s failure will never be your success or the success of the company. One for all, all for one.
  7. Love what you do: Last but not least, you need to love what you do. Waking up every day to do something that you’re passionate about will keep you motivated and happy. Your levels of performance will be much higher and your creativity will start to flow. Sooner rather than later, you will realize that goals are much easier to achieve once you have the drive to reach them.

At Ideaware, having fun is one of our corporate values. We are all about balancing responsibility and well-being. We understand that keeping a happy and healthy work environment is everyone’s job, and we work hard to make that one of our goals every single day. It brings great benefits for both employees and organizations, and a lot depends on you. Think happy, be happy. 

‘What you think you become’ -Buddha.

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

We’ve all been there. Talking to a friend when suddenly you get that “Aha!” moment of a brand new idea for ...

We’ve all been there. Talking to a friend when suddenly you get that “Aha!” moment of a brand new idea for the next big mobile app. The current state of technology allows many people to dream big and start building software to solve a problem they’ve experienced or seen first hand.

However, this is no easy feat and if you want to jump on the boat of creating a web product, you’d better prepare yourself with some readings that will open your mind to a new world of opportunities.

Keep on reading to find out which books you should be buying next.

A Good Comparison First

A good analogy for building software is building a house. You plan, assign a budget, get advised, hire ideal people, and off you go.

On the other hand, building software is more flexible than a house.

Once you have the foundations and walls of your new house, changing the base structure will be very expensive and time-consuming.

Software is more malleable.

You won’t be able to modify base structure every time but there are techniques to handle the constant evolution that software projects face.

The most important thing about software being malleable is that you have to embrace projects with a very different mindset where constant change is a must and nothing is ever taken for granted.

You also have to consider a new way to handle things. To consider software as a new universe where things happen differently.

The following books are all about this mindset.

Sprint: How to Solve Big Problems and Test New Ideas in Just Five Days

Website

What I found best about this book is the approach it proposes. Sprint was written by Google Ventures members. The authors are people that have the money and power to hire people, pay for services, but that’s not the approach they want you to take.

Spending money is expensive, so Sprint wants you to do something better: validate your idea as many times and as fast as you can.

The book wants you to experiment.

Your awesome idea is awesome but you’ll face harsh reality once you take it to people to dissect it and give you down to earth feedback. First, validate your idea in a small experiment with the target group, collect feedback, iterate. By following this path your road to success will have a rock-solid foundation without guessing what your customers really need or want.

The words you want to learn and practice a lot are: experiment, prototype, validate, feedback loop, iteration.

In the end, you want to build a software product or service and, trust us, we’ve been doing it a handful of years, it’s not an easy two months thing.

Of course, you can throw everything away, do what you believe is best and create that incredible software without help from outsiders but as soon as you get it to the real world, you’ll see everything you missed and will probably find yourself thinking “if only I had asked…”

Getting Real: The smarter, faster, easier way to build a successful web application

Read online

This book is kind of a “bible” to me whenever I start a pet project.

Sadly, I read it for the first time too late after building failed projects at the personal level and company level.

This was the year the Lean methodology was booming and I got the chance to participate in a country-wide effort to get more people to build software. In this government initiative, several workshops were available to participants. In one of those workshops, here in Barranquilla, I learned about the MVP: Minimum Viable Product.

The instructor explained the MVP is the smallest version of your application that fulfills the customer needs. It was a mind-opening moment for me because I knew why I had failed before when doing my own software projects.

I tried to get those ideas to my boss at that time but with no help. The guy was stubborn and unfortunately, money was spent and lost. Project closed.

I can’t really recall how I found the book but reading it was such a good experience. It mentioned everything that went awry in that project, how we could’ve put it back on track, how to handle third party requests.

Third-party requests can kill a project.

We were working on a Learning Management System project for schools. Every time we leave a school after a meeting with the manager, a pile of requests would accumulate in our infinite backlog.

Several shortcuts and spaghetti code was written to handle so many specifics between schools. When we realized we couldn’t give everything to everyone, it was too late.

Getting Real is a book that will give actionable advice on how to avoid and not to fall into those traps.

When you’re starting your web software, you don’t need to wait a whole year to try it. You can plan small iterations and start testing with your friends, family, pals, people on the streets. Don’t fall into the trap of waiting for it to be “ready”with everything because it’ll be too late. Besides, in six months, you’ll have new ideas and the deadline will be moved or mismanaged because there’s a lot more to do.

Don’t do that. Go with the small iterations approach. Remember, Google Ventures employees advise it.

Also, a very good advice from Getting Real is “Less Mass”. Don’t get attached to “a hundred features”. That’s a sure way to fail.

Did Google start with Gmail, Hangouts, Drive, Cloud, Docs, Keep, Calendar, etc, etc? No, they didn’t. Google started as a search engine and grew from that.

Yeah, it’s nice to have a million features but it’s not worth it when you’re just starting. You’ll be losing a lot of time and money chasing the perfect app instead of delivering (and even better, charging users) early and often.

Shape Up: Stop Running in Circles and Ship Work that Matters

Read online

This is an awesome book. It explains how Basecamp (writers of previous and this book) work and the way they organize work to be done in a given period.

If you want to take advantage of the lessons in Shape Up, you need to prepare your mindset. If you’re new to software projects, it can play in your favor as you’re not so biased with other project styles such as scrum, kanban, waterfall, etc.

In summary, Shape Up wants you to do a great job defining what’s going to be done in the next six weeks. Leave all uncertainty behind, so that developers can go for it with less amount of doubts or unclear requirements.

By defining an overarching goal, you’ll let developers and designers figure how to reach it by themselves. No need to create story cards, tasks, subtasks. Just one goal. Let devs create their own tasks if they feel they need them or whatever methodology suits them best.

Normally, in a software project, there’s always something great that will pop up in the middle of an iteration. This is usually a “great” idea by someone in charge and all of a sudden they give it top priority because without it the product “would be useless”. That’s complete BS.

It’s not bad to have ideas. What is bad is to let them slip through your process. Shape Up (and also Getting Real) tells you to say “no” to that idea, at first. Reject the idea until several people or users are affected by the lack of it or even better, they suggest it.

Shape Up proposes a six weeks cycle because it’s a good amount of time to deliver something meaningful. Of course, this is not set in stone and you can test and find the best cycle for your team. What’s important is giving proper time to do serious research, validations, small iterations, and being able to deliver great and important work.

It’s not going to be six weeks doing “small things”. By no means, those six weeks will be spent doing the important work, delivering value to users. This usually means big tasks. Big releases.

Building software is an exciting journey. There are exciting, complicated problems to be solved, and a new way to help companies or people with their daily lives or routines. Software is very important in our daily lives and this is why building software requires better processes, better mindsets, and better ways to create them.

When building great software, the path and the destination must be great as well. Fortunately, there are awesome books to learn from experts and set yourself up for success.

Thanks for reading, hope you liked this article. 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.

Contact
Contact

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