Categories
General

6 Essential Tools for Software Development Teams

software tools

Imagine living for a few days without water or food. We, as human beings, need water and food to survive. They are essential to our survival.

What about software development teams? What tools are necessary for software development teams to survive? To answer these questions, I’m going to list the tools I’ve used in my 14 year career as a software developer.

1. Planning Tools

All starts with a general idea. Creating an user story is the beginning of the conversation. Jira, Rally, Fogbugz are tools that allow users to create tasks, issues, user stories. Once you have these items created, you need to start planning your work week. With Jira you can create sprints based on your schedule. It allows you to take into consideration your capacity and also the effort needed to complete these tasks. Having these planning tools is a must have tool for any software development team.

2. IDE / Editors

Visual Studio, SublimeText, Textmate, Vim, Emacs, Webstorm, Atom are some of the most popular IDE/text editors. In a Windows shop, Visual Studio is the go-to IDE. In my opinion it is the best IDE I have used. If you are a Ruby developer, Emacs and Vim are popular choices. The most important thing here is to pick the tool that allows you to be more productive.

3. Source Control

Git, Subversion, Team Foundation Server, Mercurial are source control management tools used in software development teams. GitHub is the place to share open source software and it is based on Git. Without having a source control management tool, your team will not be an effective team. My favorite tool in this category is Git. Bitbucket is an affordable solution when it comes to hosting your code in the cloud.

4. Continuous Integration

TeamCity, CruiseControl.NET, Jenkins, Travis CI, AppVeyor are the major players in this category. If you are in a tight budget, give Jenkins and CruiseControl a try. These are open source tools with hundreds of plugins available. If you want a more robust tool, I highly recommend TeamCity for your continuous integration needs.

5. Continuous Deployment

AWS CodeDeploy and Octopus Deploy are tools that our team is currently using to deploy our applications to production. Octopus Deploy is a tool that specialized in .NET deployments. For non-windows projects, Heroku is a popular choice that integrates with Git. To be a successful team, you must automate your deployments. No more manual deployments since they introduce the human factor and usually results in human errors.

6. Documentation

This is not a very popular word for software developers. No one likes to document their software processes but it is a must have tool to succeed. Confluence is a very popular choice when it comes to documentation.

I find it very useful to document your environment. What is the name of your development web server? Where do we host our code? If your team is growing, you need to document these items and encourage team members to contribute back.

Let me know if you have a similar list on your team.

Categories
.Net CI

Available Options for Continuous Integration for .Net Applications

Continuous Integration

Continuous integration is a must practice in any software development team. It allows you to receive feedback instantly about the state of your project. In this post I’m going to share the available options to implement continuous integration for your .Net projects.

Jenkins

Jenkins is an open source tool written in Java. It has a nice UI to help you setup your project. The Jenkins community has also created many plugins to integrate with your favorite tools. It is easy to setup and configure. If you are not using a continuous integration server, I highly recommend Jenkins.

CruiseControl.NET

CruiseControl.NET is also an open source tool initially created by ThoughtWorks. Just like Jenkins, it has plugins available to integrate with bug management tools, source control, reporting, and others. The initial setup is easy but creating projects is more complicated since there is no UI available. You have to edit an XML configuration file.

AppVeyor

AppVeyor is the new kid on the block. It’s a cloud based solution that relies on Azure for its infrastructure. In addition to continuous integration, it also offers continuous deployment. Scott Hanselman wrote a blog post about AppVeyor.

It is free for open source projects. For private projects, price start at $19 per month for 1 project and 1 concurrent job.

Bamboo

If you have used Jira, HipChat, Confluence before, you will feel at home with Bamboo. It is more that a continuous integration since it allows you to do continuous deployment. It also integrates with Jira, and Bitbucket for a smooth workflow.

Visual Studio Build

If you are invested in Team Foundation Server for your source code management, you can take advantage of the Build feature. The same Build feature is also available online with their cloud product called Visual Studio Online.

Team City

Team City is a very popular continuous integration for .net projects. You can find more about its features here. It is very pricey but well worth the price. TeamCity will not disappoint your team.

Conclusion

I have listed about these CI tools briefly but encourage you to play with them and see what works best for you. Let me know if you use a tool not listed here.

Categories
General

Deployment Horror Stories – Development Artifacts to Production

deployment mistakes

Last week I had to deploy a fix to production. It was a small fix, low risk change. It was my first time deploying this application and the instructions were very simple to follow.

However, I made a mistake and broke the application. The good news was that this mistake only affected our internal employees.

After debugging for 30 minutes, my colleague read the configuration file and its settings belong to our development servers. We had to re-deploy the application but now with the production files.

I kicked off a new production build and this time I made sure that I copied the production artifacts instead of development artifacts.

The deployment was successful and our application was back in business.

What I learned from this experience?

I learned that manual deployments are prone to human errors. In this case, it did not impact our external customers. Only a handful of people were impacted and after deploying the right artifacts, we were back to normal operations.

To avoid these mistakes in the future, I’m automating our deployment process with tools like Octopus Deploy and AWS CodeDeploy.

Let me know what you or your team is doing to avoid these mistakes.

Categories
General

What I Learned From My 5 Year Old Son About Being Persistent

cenote azul

I received a call on Friday about an opportunity to go to Cancun, Mexico for a few days. Of course I said, “yes I’ll go”. I just need to ask my boss for permission. After talking with my boss, I got permission and now I just needed to buy the airline tickets.

Bought the tickets Friday night leaving DFW airport the following day. I was excited about the trip since it was my first time visiting beautiful Cancun. My son, Samuel, came with me to visit my wife’s family there.

We visited Isla Mujeres, Isla Blanca, Playa del Carmen, and el Cenote Azul. At the Cenote Azul, we had a great time relaxing, eating, and drinking at the river. We were surrounded by different kind of fish.

My son wanted to catch a fish so bad that his persistence taught me something new.

At the beginning Samuel wanted to grab the fish by using his bare hands. No tools just his hands. I helped him but the fish were too quick for our movements. We tried to catch something for an hour with no luck.

After the first hour, I was tired and ready to give up. Not mine son. Samuel was determined to caught some fish.

He said, “dad we need to trap the fish. You go that way and I’ll go the opposite way and then we will get them.”

Samuel at the cenote azul

We tried this new technique but the fish swan so fast that we never came close.

After many failed tries, my son had a different idea. He just needed a net and for sure he will grab some fish. But there was no net in sight so he asked for a t-shirt. We grabbed a t-shirt and started using it as a net and we came close to catching them. My son was determined and he felt that he was getting closer and closer to them.

I was motivated to see him that persistent. He was determined. He had a clear goal in mind. He had a mission. And he was not going to give up that easily.

Using the t-shirt as a net did not work, but he came up with a different idea. We were eating chips and my uncle Jose started feeding the fish and they were eating in a concentrated area next to small rocks. My son used a small foam cup and tried to grab a fish while the fish were eating chips. At the beginning, he was afraid of the fish because they were eating fiercely and the movement scared him. He continued to use the small cup and finally caught something. He was so happy that he got a fish. All that hard work finally paid dividends.

I was happy for him because he was persistent and did not gave up after many failed attempts.

This experience taught me so many things about life. Many times we give up on our dreams because we tried to accomplished our goals but we have failed. We have used different techniques but they haven’t worked. We failed and the act of failing brings discouragement. Life is a constant battle. Don’t give up that easily. Learn from this story and be persistent until you catch your first.