Developer productivity is not all about how many lines of code you can write in a day and it’s not about how fast you can complete a given task. In truth there’s no one trait or silver bullet that will help you become a more productive developer. It’s a combination of the practices, tricks and tools that you employ to improve software quality and delivery every day.
At Bowery, our goal is to enable stronger and more productive developers. So we set out to get advice from the most talented and productive developers we know on how they manage their time to stay on task and productive. In the second post in our series, we spoke with Kim MacCormack a Senior Software Engineer and Architect at IBM. Kim is not only a master software craftswoman, she’s also an Ice Hockey player (she plays on 3 teams a season!). See how she juggles it all and more below.
What was your first engineering job?
My first coding job was as a Webmaster (yes that’s how long ago it was) at a Telecommunications company. My first engineering job was as a Java developer on an import/export control system for the US State Department.
What are three qualities that make you a strong developer?
The three qualities that make me a strong developer are my strong organizational skills and passion for detail. I’m also very well-rounded in terms of the projects I’ve worked on and the problems I can solve. I have worked on over thirty web applications for various commercial, non-profit and government clients as both a Software Engineer and Technical Lead in varying domains. In addition, I have extensive experience with every aspect of the software engineering lifecycle including: requirements analysis, design, user interface design, code development, and quality assurance.
What are some tactics you’ve developed that help you write really high-quality code?
My most used tactics for create high quality code are writing tests, creating lots of generated sample data, studying design patterns, requesting code reviews, and working on a variety of projects across different sectors and with different deliverables.
I have worked on applications for various commercial, non-profit and government clients of varying domains such as a rebuilding of a 17,000 page site for the American Museum of Natural History, an import/export control system for the US State Department, a cloud marketplace for IBM, Salesforce integration project for a large networking company, an affiliate tracking tool for LivingSocial, a large HD video streaming web application, a tenant based tool for bookkeepers, multiple social networking and profile search engine applications, a data collection application for a government research institution, public and intranet sites for government agencies, and a multilingual website for a large telecommunications company.
What are some best practices you’ve developed to work better with your team?
I work best on a team where there is a culture of mutual admiration and respect. I’ve found that doing a great job is the best way to earn the respect and loyalty of your team. I also strive to be professional and publicly recognize teammates when deserved. My dedication to being organized and on top of my tasks has helped me earn the confidence and trust of all my teams I have worked.
On a weekly basis I publicly commit to what tasks I will do to contribute to the project, usually during a scrum meeting. If a situation arises where I can’t meet those commitments, I communicate this as early as possible so there are no surprises. I am always honest when I make a mistake or don’t know how to do or manage something. I provide status at the end of every day of what was accomplished and my plans for the next workday.
How do you (how does your company) measure your own productivity or that of your team?
I measure both my own productivity and that of my team, by how often we meet our commitments, with high quality software.
In terms of time commitments, I use my experience to accurately estimate my tasks and then meet or exceed the estimated completion date. Quality commitments are met by striving for 100% test coverage of my code.
One frustrating thing for developers is often maintaining technical debt. How do you and your team manage proper maintenance of high-quality code in your app/project?
I think the best way to manage technical debt is to commit to 100% code coverage. With that foundation, the team can feel confident that a refactoring effort won’t cause unexpected consequences. I treat refactoring as a feature that has a dedicated time frame every quarter and include it in the schedule and the product backlog. There is a constant need for security patches, updates, redesign, etc.
What are some tools you and your team use to maximize productivity?
I have found that some of simplest techniques help team maximize productivity. A daily scrum for the team to share and publicize each individuals personal commitment to the release. Group chat tools that allow for quick synchronous chats (such as SameTime, HipChat).
Make an attempt to automate anything you can with technology or templates. I am always looking for areas to automate or improve the speed at which changes can be made to an application by the client themselves.
Automating the integration of code between developers where every push to a source code repository is verified by an automated build and a test suite is done with Cruise Control on our local servers or a hosted continuous integration solution such as Semaphore. We then automate the notifications of any problems to our chat tool, such as HipChat.
Wherever possible I build an “administrative dashboard” so that clients can not only change their data themselves, but also allows for immediate time to market without having to wait for a release deploy.
What is a big challenge that you overcame in your engineering career?
The biggest challenge in my engineering career was insecurity and confidence issues. I overcame this by surrounding myself with successful, positive engineering role models who were very supportive in helping me step outside my comfort zone to gain the confidence I needed.
Pair programming is an excellent way to expand your comfort zone and gain confidence as a developer. I started out by choosing two engineers who I not only respected from a technical standpoint but who understood how nervous and shy I was about the process. Once I got comfortable sharing my technical skills in that supportive environment, I branched out to pair programming with people I didn’t know personally. I believe this effort helped me grow leaps and bounds as an engineer, not only in adding to my knowledge base, but most importantly feeling confident voicing my opinions.
For more productivity tips, follow Bowery on Twitter @Boweryio