Doug’s post from a couple weeks ago reminded me of one of the most interesting philosophies that I have seen to fruition during my time at Don’t Panic Labs. While we are always interested in engineers with a considerable amount of experience, we especially look for bright, young engineers that, regardless of inexperience, exhibit an eagerness to learn software engineering. We can place these individuals in an environment in which they will be able to grow through hands-on experience as software engineers and gain invaluable knowledge in the various areas of application development.
This summer, I was fortunate to be a part of hosting our intern team. We have hosted three interns since the middle of May. They were ripe from their freshman year at the University of Nebraska – Lincoln, all studying some variation of computer science and engineering. Needless to say, their lower level of experience would be a perfect test of our ability to give these students the tools and experience to succeed.
One of the most important aspects to any software internship is exposing those involved to a fun project in which they will actually apply their skills to build a usable software product. Our ultimate end goal is to have our interns working to build real, customer-facing applications that will give them a sense of fulfillment and accomplishment. An internship should provide students with an opportunity to apply their current set of skills while learning aspects of software development that are not taught in the classroom.
The Project (and Process)
Instead of placing our interns in any one of our busy teams, we decided to start smaller. We wanted to give them the experience of building an entire application from the ground up. Personally, I believe one of the most exciting aspects of working at DPL is estimating, setting up, and building MVPs (Minimally Viable Products). This process seldom happens at larger, more developed companies. Allowing the interns to go through this process would give them an experience hard to come by in other internships.
In months prior, we had determined the need to build an application to make a certain “prize contest” portion of our annual company party more efficient. Instead of our usual process of drawing tickets to win prizes, we wanted to digitize the process and create a better experience for the “contestants” as well as the “drawer” (for the lack of a better word, the person running the contest and drawing names out of a bag). This project would add plenty of value and efficiency to our current process of drawing winners and picking prizes, making this project worthwhile.
The requirements for this project were perfect for our interns. It would be full of new feature development, cover a full-stack implementation, and offer many insights to building an MVP application. In addition, our interns would be involved in daily standups and active in iteration planning meetings. By doing so, we would expose them to our flavor of agile development and possibly give them a baseline of their own to use in their many school projects ahead.
Finally, their code would be reviewed by a lead engineer on the team (a DPL engineer) to ensure feature completion and adherence to patterns and practices.
Results and Findings
During the first day or two of development, it seemed that our interns were hesitant to ask for help. We know this can occur, and it should be a concern for any group of engineers within a team or company – regardless of experience level. We engineers at DPL would much rather work as a team to accomplish an end goal. No single person propels a team by withholding information, nor does a team thrive when an engineer exceeds a reasonable amount of time on a problem that could have been easily solved by simply conversing with another engineer.
Not only did we stress that it was okay to ask for help, but we “mentors” also needed to make ourselves available to help. This varied from quickly answering questions over IM to spending time discussing a problem and proposing a solution. Once the interns found value in this process, they were no longer reluctant to ask for help. They quickly learned that it was alright to ask each other for help as well. They were starting to learn the importance of working as a team.
After approximately two weeks of effort, our group of three interns had successfully built an MVP from the set requirements. The team had completed an admin and client portion of the application that would be ready for beta testing. The team had been exposed to many of our core principles, including service layers, factory patterns, and unit testing. Some of the technologies used included ASP.NET MVC, KnockoutJS, SQL Server, SignalR, and Moq.
After we had completed our initial MVP product, we polled our interns about their experience during the internship. There was one area of questioning that stood out from the rest. All of them agreed that the applied knowledge they had gained from the first few weeks of development far exceeded any application of skills they had been exposed to during their first year of college. Personally, I was thrilled to have heard that from them. I had this exact experience from my internship while I was in college. I was glad to have had the same impact on them.
While there were many positive results to our process, there were also negatives. One I would like to mention was a sense of frustration that was met by our interns while working on certain user stories. This is also a very common occurrence with early software development. Again, we stressed that this is okay! All engineers, regardless of number of years of experience, go through frustration every day. Software engineering is not always easy. This profession requires the ability to face these frustrations head-on to eventually invent solutions and excel as an engineer.
Now that the initial project has been completed and the interns have transitioned to working on other projects here, I am glad to say that I enjoyed working with this summer’s interns. They were rather “green” at the beginning of the summer. However, they were very intelligent and had the right characteristics and desire to learn. That kind of ambition is exactly what we are excited to see and work with here at Don’t Panic Labs.