News from the Academy

Apprenticeship Patterns

The recent Academy class is well into their apprenticeship phase. They've been encouraged to build upon the foundation laid and grow personally and professionally. Part of that has been to do some reading and reflect on what they have read and its application to their journey as a Software Craftsman. Braxton Plaxco has provided some of his insights gained from reading about Apprenticeship Patterns.

Apprenticeship Patterns

The book Apprenticeship Patterns by Dave H. Hoover & Adewal Oshiney is a wonderful book for any aspiring software craftsman. It teaches the patterns needed to get a solid foothold in a world that is always changing. Working at RoleModel has allowed me to apply many of these patterns throughout my apprenticeship. Three of these patterns have been quite useful so far and they are: Find Mentors, Kindred Spirits, and Sweep the Floor.

Find Mentors

"Whether a beginner starts out with a training course or is self-taught, the first step on the path to software craftsmanship is finding a craftsman to apprentice himself to."

– Pete McBreen, Software Craftsmanship, p. 96

In the pursuit of becoming a software craftsman there are many blind alleys that one could go down. The guidance of a master craftsman can help the aspiring young apprentice, such as myself, to navigate these alleys and grow in their craft. At RoleModel I was blessed with the opportunity to work under one of its Senior Software Craftsman, Tim Irwin. He has helped me to improve in many areas in my life spanning more than just that of code quality. He has helped to ask the correct questions such as 'How would I go about figuring this out on my own?' and 'What resources do I need to complete this task?' instead of 'Can you help me do this?' (i.e. can you do this for me?) He has taught me how important it is to have strong soft skills. Soft skills are the ability to communicate well with clients and others, and are often neglected in the software development world. By guiding me through interactions with our clients I feel that my soft skills are steadily improving.

The ability to work with a good mentor has given me a definite edge in my growth as a craftsman and has been a great encouragement in my growth as an individual.

Kindred Spirits

"Nothing is more powerful than a community of talented people working on related problems."

– Paul Graham, Hackers & Painters

It can be intimidating at times working solely with a mentor, that's why interacting with other people within my skill range has been very beneficial while exploring new avenues. It has become quite a source of enjoyment in my side projects. Kyle, Jeremy, and I have our own Skype channel (dubbed CowChat because every message posted has been piped through cowsay first) in which we talk about our ideas for pet projects, as well as posting an occasional pun. It has been very encouraging to have colleagues to share ideas and grow with. I am also looking into contributing to an open source project. I think it will give me a chance to expand my skills and join a part of a larger community.

Sweep the floor

"In the craft tradition, newcomers start as apprentices to __ __a master craftsman. They start by contributing to the __ __simpler tasks, and as they learn and become more __ __skilled, they slowly graduate to larger, more complex __ __tasks."

– Pete McBreen, Software Craftsmanship.

In the book, Apprenticeship Patterns, the author retells a story of an apprentice who, in trying to find his place on the team, took on the menial task of sweeping the floor. When first joining a team it is good to find ways to begin providing value immediately. The way to do this is often not through actually sweeping the floor, but by taking on tasks such as: test automation, refactoring code, removing technical debt, and that task, "who shall not be named", that has been put on the back-burner for so long because no one wants to do it. It's funny, at RoleModel I actually did end up sweeping the floor. I was given the opportunity to take on some of the DevOps and SysAdmin tasks. The server room was in need of attention so I removed all of the excess material, swept and cleaned it, had shelves ordered, and organized the equipment. It was humbling to take on this task, carrying boxes up stairs while everyone else was sitting together in the main room coding, but I also felt a sense of accomplishment that I was able to improve something in the company.

In Conclusion

"I have no special talent, I am only passionately curious"

– Albert Einstein

Apprenticeship Patterns is filled with many patterns for tackling the tough situations craftsmen will face as they begin their journey. As you quickly learn you can not throw all the patterns at a given situation, but rather you have to apply and adapt the relevant patterns to fit your needs. That being said I would recommended this book, for anyone regardless if they plan on pursuing a career in software development. It has patterns applicable to all areas of life, and I plan to seek opportunities to apply them as I continue to nurture a healthy sense of curiosity in my life.

Expanded model in 2015

After running two successful academies, our clients, our partners, our potential clients, are all asking how to get people like the ones we've trained?

Last year, we proved that the model not only works for the young and energetic craftsman wannabes, but also for those who are ready to either retool (e.g. Greg Tarsa, who had previously built file systems in C) or make a change in their careers (e.g. Eric Ricketts, who had been a chip designer). This isn't just a series of tutorials, but an immersion in the thought process of a software craftsman, applied to web and mobile development from the backend to the front. Each person is working on their assigned projects, that are not all the same, but similar enough where they help each other in addition to the help they get from their mentors. Those who are going faster will get more complicated projects, but all will be challenged to exercise and grow their craftsmanship mindset and muscles.

So, in addition to taking in young folks who are ready to begin their journey, we are opening up slots for businesses who wants to sponsor old or new employees to take it up a level. We suggest that these companies work out the financial model with their employees similar to what we do with our scholarships (you pay the cost of the training back if you don't provide adequate service to pay your sponsor back).

There will only be 12 slots available for the full-time immersion phase that starts on June 1, 2015.

As usual, we will take applicants on a rolling admission basis. Everyone must follow the application process and will have at least one live assessment of their ability to succeed in this intense program.

We would like to have the 12 slots filled by March 1, 2015, but we will not fill them with unqualified candidates. This is a large investment on both the applicants and RoleModel's part, and it should not be taken lightly. It is not an "open enrollment" class, but a competitive application process.

Those who have gone through it, know that it is unlike any other training they've ever taken.

Eric Ricketts went through the Naval Academy at Annapolis and said of the Craftsmanship Academy, "this was the most intense training I've ever been through". Don't worry, he lived to tell about it with a big smile on his face.

On to Apprenticeship

Well, five of the six made it through the immersion phase of this year's academy.
Even though the immersion phase is roughly the same in length as many "Programming Bootcamps", and has some similarities, it is still very different as it is part of a much bigger picture. Recently, Liz Eggleston of The Course Report invited me to write this article about the differences between software craftsmanship development and programming bootcamps.

I'll write more later about the apprenticeship phase that the Academy participants are in the middle of now, but I want to first summarize the immersion phase.

On the last day of the immersion phase, I asked them to describe what they could do before and after the immersion phase. This is what we ended up writing on the whiteboard:

Immersion Summary

Perhaps you can't read my writing. Well, here's the stuff on the left which they say summed up what they knew before the immersion phase:

Immersion Before

And here is the middle, where they described the architecture of what they built during the immersion phase and what they know how to build now:

Immersion Application

Using these tools:

Immersion Tools

(I understand you still might not be able to read my writing.) Well, I'll let one of our participants, Greg Tarsa, describe his experience:


Back in December, 14+ weeks ago, I entered an Immersion Training program in the Craftsmanship Academy of RoleModel Software in order to refresh my programming skills and get a leg-up working in the world of Web application programming.

It has been quite a ride.

I came into the program after losing my job as an Operating System Software Development Manager. Twice! While I loved building teams, I missed being hands-on. I wanted to re-boot with some new skills and get acquainted with a whole new field of software development. RoleModel's Academy looked like an outstanding way to do this. I applied and was accepted. The class included two of us "re-booters" and 4 younger high school graduates from various parts of the country.

This will be a looooong article if I try to describe play-by-play all that we covered. There are a lot of moving pieces in web application development. But a short laundry list of things we learned is in order. Besides basic HTML and CSS, there are also implementation languages (Ruby, Objective C, JavaScript), templating languages (Slim, ERB, SCSS), domain-specific languages, server frameworks (Sinatra, Rails), and development methodologies (TDD, OOP, R-G-R). Oh, and databases (SQL, Postgresql), let's not forget databases. Or git. Or–nevermind. The list is too long.

After completing the course, I have a solid exposure to a wide variety of these tools and concepts, but more importantly, I have come to understand many of the key relationships between and among them along with solid development approaches that help keep things simple while also creating running code early in the process.

First the development principles.

At the core of the process would be Test Driven Development and Red-Green-Refactor. R-G-R puts a priority on writing tests that fail (i.e., Red) before writing code that works (Green) before writing code that is clean or even straightforward. "Make it run, make it right, make it good." was a mantra here.

Test-Driven Development works hand in hand with this. TDD in its best form, has you writing tests before the writing of code. Using tools, like rspec, capybara and spinach we essentially learned to write specifications incrementally. Write a test, watch it fail. Write the code to make it pass. Write another test, etc. Very quickly we had three useful things:

  1. A working body of code that was making visible, incremental progress toward usefulness.

  2. A robust set of tests that exercised most every line of that code, making refactoring and on-going development more straightforward since there were always significant tests that would verify that the changes did not have unforseen side-effects.

  3. Well chosen test phrases in a test framework, like rspec or spinach, results in a reasonably worded specification of program operation. Spinach for high level descriptions and rspec for low-level descriptions.

Coming from an OS development background it was challenging to let go of the long practice of not writing code until the specifications are completed and completely understood. But I learned…

In the area of Object Oriented Programming, we learned three languages: Ruby, Objective C, and Javascript. Each had its sweet and bitter features. All of them allowed for basic practices of encapsulation and provided objects and the ability to send messages to them. Ruby seemed the most comfortable with its object-ness, but Objective-C brought more clarity to the message passing involved with good object orientation. Javascript was trickier to use, but shed light into the "guts" of an object system via its "prototype" orientation towards objects (i.e., instead of using explicit classes).

All these concepts, languages and tools came together in the week we started to learn Rails. This exposure to Rails came via the Ruby On Rails Tutorial by Michael Hartl. Ruby, Slim, client-server, database, rspec, capybara, spinach, SASSy CSS, Model-View-Controller. Everything we had learned, experimented with and wrote code for came together here.

Carefully meshed into all the classroom instruction, project assignments, daily reviews, etc. was the growing application of Agile development principles. We learned the value of moving forward without knowing all of what we were doing at any given point in time. We saw first-hand how plans never go as written and so investing in their core elements and pushing the details off to later works well in creating a cadence for for development. We were doing weekly reviews of what we had been learning and experiencing in our class projects from the start, this turned into weekly iteration meetings for our final project.

The core beauty of this training was how the techniques and practices taught preclude a great deal of the heartache and grief that comes from learning a tool, technique, or framework out of context and then learning how to use it wisely. Ken Auer was our guide through a Labyrinth filled with pits, snares, and energy-sucking death traps; any number of which would have greatly delayed our learning the critical mass of skills needed for web programming. However, through careful leadership, we never had any real scares, much of what we know as the only way to do things are industy Best Practices. We were not simply guided through the course, we were molded into into apprentices with principles that will make the path ahead more productive, more fun and a great learning experience.


Now these folks are ready to be apprentices, sitting with our Craftsmen to learn and help. They don't have to ask why we're writing tests first, how to use Git, or many of the basics of the way we do things. They'll be taking all the things they learned and working on real projects, observing the craftsmen as they expertly work through a myriad of challenges, and contributing as they can on their journey to become craftsmen in their own right. It may seem like a long way to go, but they've taken some great first steps.

Incoming Class of 2014

I would like to introduce all of those accepted into the RoleModel Software Craftsmanship Academy that begins officially on December 9, 2013. I would ask you to pray for them, if you are so inclined.

We had to turn away some very fine candidates and were helped immensely by our new Programming Skills Assessment (as well as other means) to help figure out who was most prepared for success.

Listed in no particular order:

Eric Ricketts

Eric lives in Cary, NC and is a former Chip Designer for IBM and the father of Bruce Ricketts (the amazing 15 year old who has done some iOS programming for us in the past and, hopefully, the future). Several of us have known Eric for years and, when he decided to make a career switch were excited to give him an invitation to apply to the Academy. I have known Eric to be a godly man of integrity, and a very diligent and intelligent man, who puts his all into anything he ever takes on. I expected him to do well on his assessment, and he far exceeded my expectations. (As a chip designer, he breezed through the logic portion of the assessment). Eric is also a former marine.

I am looking forward to seeing Eric dive into his new chosen career and provide a level of maturity and perspective and set the bar high as to diligence in his studies and application at the Academy. You can learn more about him via Eric's application web site.

Greg Tarsa

Greg also lives in Cary, and was referred to the Academy by a mutual friend. In examining Greg, he has impressed as a likable, mature, and godly man. Greg has a lot of experience as a low-level operating and file system programmer and, after a few years running a franchise business, has decided to retool and begin a new career in a different aspect of the Software Development business.

Greg is a leader who has shown his foundational skills in programming and his desire to do well at whatever he puts his hands to. You can find out more about him via Greg's application web site.

Jeremy Walton

Jeremy has lived in Cary and now south of Fuquay Varina, NC, and heard of the Academy over the past few years via some of his family acquaintances with some of the team at RoleModel. He comes from a fine family and his boss at his former job at Chik-fil-A shared that he was the best worker he had. In the past couple of years, he explored programming through a variety of ways and led a team to win a competition by programming a Lego Mindstorm Robot to outperform other entries.

Jeremy's assessment showed that he had a very good foundation of basic programming skills and we look forward to watching his work ethic contribute to the growth of these skills. You can find out more about him at Jeremy's application web site.

Stephen Petitjean

Stephen heard about the Academy through his mother who moved to Raleigh a few years ago and learned about it on a local homeschool mailing list, called spiceline. Stephen has been living in Lynchburg, VA working as an installer of Security Systems but has previously taken some programming classes and desired to pursue more. We had the pleasure of hosting Stephen for a weekend as he came to meet us, and found him to be a very personable young man with a servant's heart as well as a bright young man capable of figuring out things he has not previously known.

We expect that Stephen will be up for the challenge and are confident that he will be an encourager to the other Academy members. You can find out more about him at Stephen's application web site.

Braxton Plaxco

Braxton currently lives in Arkansas and works on a farm when he is not studying through CollegePlus, from whom he heard about the Academy. He is a very personable guy who has a heart for Israel, programming and much more. One of his references said that he is the finest and brightest young man he knows. His assessment showed that he is a very quick thinker and has a good grasp of programming.

Braxton will most likely set the pace for grasping new concepts quickly and help others who aren't as quick to learn. You can learn more about him and find out about other things he's tinkered with at Braxton's application web site.

Kyle Smith

Kyle currently lives in Northern Illinois and is the son of parents who co-own simplycharlottemason.com. He has been a self-learner for many years and his grasp of what he learned has been proven by some programming projects he has done for others. He heard about us through a variety of means including John Young's parents, as well as RoleModel's first apprentice, Nathaniel Talbott who, along with Matthew Bass - another former RoleModel apprentice - worked to build the software in his parent's business. Both his references for whom he has built software, and his assessment showed that he has a very firm grasp of programming concepts.

Kyle's self-study habits should inspire others in the Academy. You can learn more about him at Kyle's application web site.

Other Applicants

We had originally intended to limit the class to only 4 slots, but the quality of applicant was so astounding, that we decided to add two more slots.

Even so, we turned away some amazing people.

We're thrilled about the quality of these fine people and look forward to having them learn and grow with us as we serve our clients for the glory of God and/or set them on their way in careers with some of our Academy sponsors.

Next Academy begins December 9. Deadlines for Application: October 18

Last week, we announced internally and to a select few people our next Academy which we will start on December 9. In addition to the applications we've already received, we will be taking more applications through October 18. We will be screening applicants throughout the next 5 weeks or so and plan to choose the 4 candidates whom we think are most likely to successfully complete it on or before November 1.

We've modified our plan slightly based on what we've seen in the past couple of years. The biggest visible change, however is the financial model. We believe it is much more attractive to our target audience and, reviewing our goals for the academy, is consistent with our goals. It is going to be much smaller, and, if everything goes as planned, we probably won't offer another one for at least 9 months and, very possibly 18 months.

If you don't want to know all of our reasons, but rather just want to get to the bottom line, just go to our updated About and Apply pages. If you want to know more about our reasons for the change, read on.

Hacker School Confusion

So, we realized there is a lot of confusion out there about "Hacker Schools". (For the record, I didn't coin the term, don't like the term, and don't want the academy to be called a "Hacker School"… but, we've been lumped in with a bunch of other programs by some. Some resemble what we do more than others).

When we announced our Academy in 2011, it was the first of its kind… well kind of. The Starter League in Chicago had already had its first session. (It was called "Code Academy" at that time). The founders had a different target audience and different claims. I met them, and they were clear that our academy had a completely different scope and focus.

But over the last couple of years, there have been a plethora of others. The marketing ranges from grandiose claims of getting high-paying jobs in 6-12 weeks, to bootstrapping your own tech company, to becoming a "Sr. Developer" in 3 months, to getting an entry level job. The programs range from a little instruction after hours to 12 hours of instruction per week, to watching videos and working on your own. Pre-requisites range from "passionate people" to "previous professional programming experience".

We've gotten lots of questions about how we compare to these other programs. (We don't know, we haven't attended them). We've been tempted to "learn from their marketing" as it appears they've gotten a lot more interest. We've wondered why some of them seem to be able to charge a lot of money for what we are confident is not as good an outcome as we think we can get, and why some of them pay the people who come through their program.

We've talked to some of the folks involved with the other programs. Some things about them overlapped with our experience. Some things clearly have different purposes and approaches. We think some are naive in their expectations, while others are more reasonable. Some sound better than others. And, no, we are not going to attempt to do a critique here.

At the end of the day, we've just had to come back to "Why are we doing this?" and "What does our experience tell us to do?"

Why are we doing this?

It's simple. We believe it is the best way to begin to produce software craftsmen.

We have found that the value of the education we provide is huge, but most people don't have a mental model that would provoke them to pay for it. They'll pay tens of thousands of dollars and four years of their life for a college degree that may or may not result in a good pay off. Statistically, the results for people we've mentored far exceeds the results attained by the typical college graduate who move into the software field. We don't think there is any way that a college can begin to compete with the education/training we offer. We also don't think that most college campuses are healthy places for young people to spend very critical years of their lives.

Although we stand by these claims, and will be happy to explain why we think it will always be true, we are not doing this to take the university system on in both outcomes or incomes.

At the end of the day, we strive to be the best software craftsmanship shop measured by the value we provide for our customers and the integrity with which we walk. That is our calling.

We'd like one or more solid, well-trained, Jr. Developers to join the RoleModel team in the next year plus to help us meet our goals. We realize that the best way to get people who are good RoleModel team members is to be selective about who we take and train them well. We also realize that every person we train may not be a good fit for RoleModel for a wide variety of reasons. It could be timing (we don't have enough work to justify keeping them on). It could be focus (there are lots of noble software development goals that happen somewhere besides RoleModel). We are not omniscient. We don't have a formula that guarantees that every detail of the outcome we desire will be met. We do have a clue about how to do something that has been very fruitful.

What does our experience tell us to do?

Having "mentored apprentices" since the 90s, Ken has seen first hand results of having a hand in producing some great software craftsmen, and the gap in skills between the folks he's mentored in the first months, years, and longer term than most other developers out there. The two 2012 academy graduates that have ended up as Jr. Developers at RoleModel are doing very well. Caleb Woods had an very successful apprenticeship program he helped run at CollegePlus. We compared notes and decided to merge our experience with the focus of producing solid Jr. Developers on the track to becoming successful Software Craftsmen.

We've had several applicants express interest in entering the Academy before the end of the year. Some are experienced professionals looking to make a career change. Others are young people looking for a way to enter a career that seems attractive to them. Our experience tells us that the same training is needed for each, though the potential paths after training is complete (or even part way through the training) could be very different.

So, now we have one program with two different financial models. There are clear evaluation points through which the program will continue or discontinue or a referral might happen when we think one of the participants are doing well but, for whatever reasons one or both parties thinks it might be best for them to continue their journey elsewhere.

We're excited about it.

If you are excited about it, too, and are either someone who wants to participate, or knows someone who might benefit from participating, we are taking applications.