(Uncle) Bob Martin made a keynote address at Agile 2008 where he spoke about many of the concepts in his book Clean Code. In that talk, he proposed amending the Agile Manifesto to add the value of “Craftsmanship over Crap.” He later realized that this wouldn’t work because no one actually values crap. He later changed his proposal in a blog post where he suggested “Craftsmanship over Execution”. In that post he offered up a challenge to find a better word than Execution.
I hereby offer my entry as Craftsmanship over Compromise. I like it because we all value compromise, just like we value processes and tools, comprehensive documentation, contract negotiation, and following a plan. Compromise is a necessary part of the software business. However, we should value the ethic of creating an effective, lasting solution over shortcuts that are instantly gratifying, but are more costly in the long-run.
Architecture is one of those overloaded terms in the software industry that has been so abused that we should consider scrapping it and coming up with a new words to replace it. However, that isn’t going to happen anytime soon; so, we’ll have to try to recover this one.
I recently came across Grady Booch’s definition of architecture, and I really like it…
All architecture is design but not all design is architecture. Architecture represents the significant design decisions that shape a system, where significant is measured by cost of change. –Grady Booch
This succinctly captures what I think makes for good architectures and good architects. The best architects have good judgment and intuition, based on experience, about what the most important design decisions are. They recognize which aspects of a system they’ve got to get right from the start and which can be firmed up later. They focus on the design decisions that would be costly to change later.
As I’ve made my transition from the Microsoft desktop platform (x86, Windows, .NET, C#, etc.) to the world of handheld devices (ARM, Windows CE, Windows Mobile, .NET CF, etc.), there have been a number of fairly basic things that I’ve had to learn the hard way. They are so basic to being productive in the compact world that there ought to be a brief guide to bring an experienced desktop developer up to speed in short order. I didn’t come across that; so, I intend to provide that here for the next guy (or gal) who comes this way.
I am not an expert on this stuff (yet) but I am immersed in getting up to speed on them. So, I will introduce the important topics and point you to resources that I found helpful for the details.
The sorts of things I plan (so far) to cover include topic like… What is CE and how does it relate to Windows Mobile? What is the memory model on CE? What are the memory limitations and strategies for working within and around them? What do you have to do to run your .NET code on the handheld device? How do you do unit testing with CF code? I’m also going to document a few potholes that initially slowed me down.
Just so this initial post is not completely devoid of actual value, I’ll start with the most basic thing you need to know. Most handheld devices are built on a flavor of RISC processor called ARM (or Advanced RISC Machine). You can get a good overview from Wikipedia and the company view from ARM itself. While the primary measure of desktop processors is speed and throughput, the primary concern in the handheld world is power consumption. You learn that pretty quickly.
[Update 1/29/2009: I’m happy to report that we are no longer looking!]
We (Agentek) are looking for an experienced ScrumMaster. If you know of someone in the Atlanta area that is looking for a position with a growing company that is early in its transition to agile software development and is committed to the Scrum process, please send him or her our way.
Here is the job description…
Agentek is a leading provider of mobile field force automation and communications solutions that enable businesses to achieve a predictable, reliable and repeatable customer experience from commitment to service fulfillment in real-time. From customized and pre-packaged applications to backend enterprise integration, Agentek delivers best-in-class mobile computing solutions that address the challenges companies face in areas such as field service, transportation and logistics automation. For additional information visit www.agentek.com.
We currently seek a Software Development Manager/ScrumMaster to join our expanding technical team.
Reporting to Agentek’s Vice President of Products and Engineering, our Software Development Manager/ScrumMaster will be working in an environment specifically designed for rapid application development of wireless applications for the Field Service Automation and Logistics market. The ideal candidate will have experience managing a team of 8-10 developers AND have experience as a ScrumMaster in a highly Agile development environment. Will be ScrumMaster for 2 teams and provide guidance to developers as a manager and Scrum coach.
- As ScrumMaster, coordinate and facilitate daily stand-up meetings, Sprint planning sessions, Sprint reviews, and Sprint retrospectives
- Work closely with the Product Owners, ensuring that product backlogs are updated and ready for the teams
- Facilitate discussion and conflict resolution
- Help team members to understand roles in the Scrum process (planning, review, estimating, etc.)
- Work with team to estimate story points
- Help team to choose stories and tasks in a Sprint, decompose stories into appropriate size tasks, and ensure that team does not over commit
- Work with team to define what “done” means
- Ensure that Sprint burndowns are updated daily and are visible to the team
- Encourage team to adopt Agile engineering practices
- Ensure accuracy of information tracked during Sprints
- Manage departmental resources and staffing – enhancing and maintaining a best-of-class engineering team, hiring and terminating as appropriate to ensure a solid team
- Conduct performance reviews of team members, coaching team members in how to be most effective in the Agile/Scrum environment
- Bachelor’s Degree in Computer Science or equivalent
- Certified ScrumMaster
- Deep understanding of Agile principles including eXtreme Programming and Scrum
- 5-10 years experience in software development and 2-5 years as development Manager or Director managing teams of at least 6 engineers.
- Previous development experience with Visual Basic, C#, ASP.NET, and MySQL
- History of managing projects, both successfully and unsuccessfully
- Ability to balance the servant/leader role
- Strong business and technical vision
- Excellent verbal and written communication skills
- Strong presentation, leadership, and mentoring skills as a motivated person who encourages others
- Strong team work and interpersonal skills – ability to communicate and work well with people at all levels
- Ability to field and manage multiple competing priorities in a fast-paced environment
- Experience working in a early-stage or venture-funded company
- Ability positively to engage conflict and constructively resolve problems
- Mobile application experience a big plus, but not required
To learn more about this exciting opportunity with a leading provider of mobile computing solutions, please send an email to email@example.com, including a cover letter describing your experience of required skills in the body of the letter, and include or attach a Word, HTML, or PDF version resume.