 Hi. We're going to set best practice standard and start on time, how unlike me usually. Ah, okay. So this session is called Mad Skills, Become the Best in the World, and I'll open with an apology. The description on the website is a more accurate description of how the session came together and the one on the iPhone or iPad, a mobile app is a little bit out of date. So this might be a little bit different than you expected, but the gist is the same. We're going to talk about the traits and mad skills that Drupal shops and development teams want you to have and that developers want to master. And my name is Diana Montalian-Dupuis. I am director of professional services at Four Kitchens. I am a back-end developer, programmer, application developer, software engineer depending on what we're calling ourselves this week. I also don't like beer, which makes me unique among our team, and very much enjoy American football, which is not the soccer version, but the football. So I'm going to ask this question, but I already know the answer. Is there anyone here who also enjoys American football? Wow, this is the most ever. I once had almost 200 people and no one raised their hand and someone tweeted, I love the Drupal community, no one likes football. So my tweet and Four Kitchens. So what we're going to do, we are not going to do static because we are developers of dynamic websites. So we're going to have a dynamic URL be involved session. And we're going to perform queries. We're going to perform queries on ourselves, but we're going to perform queries. And also because I know multitasking is a common way to spend sessions. I'm also going to suggest that we play a Twitter game. Now, this might not be as fun as I originally imagined it, because I've been hearing that the internet access is not always reliable in this room. So let's hope it is. And if it is, I was thinking that we could post tweets that have absolutely nothing to do with what's really happening. For example, there's an elephant running around the room, whatever kind of outrageous thing you might come up with, so that people who are not in this room have absolutely no idea what we're doing in here. So if you want to play, that's the hashtag. And also the organizers asked me to remind you that at the end of this presentation, if you are getting on the bus to go to Batman, and I know you all are getting on the bus and going to Batman, do not pass go, do not collect $200, go straight from here to the buses. And I think there will be some dogs nipping at our heels to get us to go there. So what are mad skills? Mad skills are a way of organizing what is the meta categories for the kinds of skills that Drupal developers need to have. I have 18 categories that we'll go through. There are more. This was whittled down. And they are all debatable, the categories themselves. And certainly the examples we're going to use for the categories themselves. But we are not going to debate them here because I know how we are, because I'm an IRC. But I definitely welcome feedback after the presentation, and I'll let you know how to get in touch with me. The mad skills are separated into beginner, intermediate, and advanced. And like I said, we're going to be dynamic. So we're going to go through them in the form of a pop quiz. It's not really a pop quiz. It's actually more of a self-assessment experience. You won't actually have to have memorized anything. But I think pop quiz sounds better. So you'll want to organize away if you'd like to keep track of your score while we're doing this. But meanwhile, let me tell you what my goal is in doing this kind of work. Working as an open source developer has been the most rewarding experience of my professional career, and it's been rewarding intellectually, creatively, socially, financially. And I really want to share those rewards with people who are not yet in this field. I personally am especially interested in working with brand newcomers, with populations of people who don't generally view this as an option. And this is the way that I, at least at the moment, am choosing to give back to the community to bring more people and enable more people to do what we do. So I do have a little bit of a soapbox rant to start, and that is that in order for Drupal to become the best in the world, we, the people who implement Drupal, must be the best in the world. That our work defines our integrity. And my strong opinion is that we are a collective of professionals, and more and more we are becoming a collection of professionals, and that we are only as good for the internet as the team who implements the solutions. So that's another reason that I'm interested in professional development. I also have some private goals that I'll only share with you because you came to this presentation. As a developer, I work with brilliant and talented people who are constantly challenging me to grow, and I would like to encourage more brilliant and talented people to join the teams that I work on, because that's what leads to the rewards. And then as Director of Professional Services at Four Kitchens, I want to build bigger teams, teams that continue to be as effective as the fabulous teams I've been able to work with so far, so that we can take on as a collective, we can take on more complicated and interesting projects as Drupal's reach extends. And then also as a Drupal event attendee, because this represents the entirety of my social life. So I need to bring more fun and interesting people into the community so that I have more people to hang out with, because apparently I'm not going to go find them on my own. And the businesses that implement Drupal, they have goals. We're going to see a series of quotes today from people who hire Drupal developers and build teams. This is the first one from Paul Bateman, the Technology Director for The Economist Online. And my question to people, and the answers did not always follow this format, but my question was, what are the top three traits or skills of either a developer that you've worked with and value, or what you look for in somebody that you're considering bringing on to the team? And Paul said his three things were skill set, that the person has the right skills for them to use. Personality, so they fit into the culture. And passion, wanting to make a positive contribution from the outset. And these are the themes that you'll see play again and again and again in what people are looking for in Drupal development. So you may have a number of different goals. You may want to make major contributions. You may want to create innovations, integrate Drupal into other kinds of technologies. Web technologies specifically. You may want to make a most used distribution. You may want to become a core committer. You may want to own a nice motorcycle or a Drupal company or be an independent contractor that everyone is fighting over or provide services to nonprofit organizations or to get a great Drupal job. So when I focus the session on the process of hiring and professional development, I do not mean to say that that is the highest priority goal that developers should have, but just to pick it out of a list of things to talk about. In fact, professional development and developing skills will help with all of these goals. So the one last definition is what do I mean the best when I say the best in the world? I don't mean better than everybody else. That's what I call the geek disease. Some of you may be a little bit familiar with it. You'll see in the feedback that people give, this is one of the things that we're trying to avoid by using the word the best in the world. What I mean is a valued and valuable member of a talented team, and value is exactly what I'm trying to say. So in typical geek fashion, I'm going to ask you a question, but I'm only asking you so that I can tell you what I think. But we're going to go through the motions anyway. What would you say is the most essential skill? PHP and MySQL skills, HTML5, an encyclopedic knowledge of Drupal hooks, lampstacks, systems administration, can set up a performant architecture, community involvement, certainly a contender, or something else. I would say that the most important skill are good person skills. Excuse me. When a new person walks in the door, the thing that I care about most is how is it going to be to work with you, that we're going to spend 40 or 50 hours arguing implementation together, and if you are... I've chosen to represent this interesting character string. If you are difficult, I'll say, then I don't want to work with you, and pretty safe to say that would be a universal feeling. But conversely, if we're in huddled together, trying to find a bug in a third-party API that isn't quite working and we need to get it working for the demo tomorrow, and I'm having fun, then I want to work with you, and so does everybody else. And certainly, so does our clients. So to give a better description of this than I can, this is a quote from Greg Knattison, who was the owner of Growing Ventures Solutions up until recently, and he is now Director of Security Services at Acquia, and he says, if you are hiring for the short-term, you need someone who has work skills, building content types, views, nose modules. If you are hiring for the long-term, you need someone who has life skills, resourceful, positive attitude, enjoys learning. In all cases, communication skills and personality are important. I follow the three-hour rule, or if I'm stuck in an airport for three hours with this person, will that be exciting, indifferent, or a problem? It has to be exciting, or at least on the high end of indifferent. So we got together, the team at Four Kitchens, we got together to try and define good person skills. We found this very hard to do. This is the list that we came up with, but still don't feel like the words are exactly quite right, but certainly communication skills would be on the top of the list. That we, as a group of consultant developers, it's a high communication, high-touch kind of work, which I think it is in general. The communication about the solution is, I would say, the most important factor in the success of the solution itself. And also because we're talking about joining a team, teamwork skills, and the being able to work with other people in a way that is productive and fun. And last was cultural fit. Cultural fit is the trickiest one to define. One thing that we know is curiosity and passion would be two essential elements to a good cultural fit. And the other is take responsibility and ownership. Very much, it's a culture of my, this is my reputation, my work is on the line as part of this team. The way I describe it is that if the team succeeds, the team succeeds. If the team fails, I fail. And, you know, take your share of the credit and all of the blame. And as a culture, this works very well because in the end, it matters to absolutely everyone that things are done well. And then this one is the cool person. And one of the developers suggested, which I think is so, is that every organization tries to come up with what that means, and Google calls it Google-y. So we call it Webchef-y, one of the similar to how Greg talked about it. Here we are at Drupalcon London. It's the evening. We're going to go out and have a beer and talk about code stuff with other people. Are you someone I want to drink a beer with in a foreign country? Is that going to be fun? And then unselfish, which I think just makes logical sense, that if the focus is very much on the individual, then that takes the focus away from the collective and the problem being solved. But I think that both cool person and unselfish just means not interesting character string. And like I said, the same themes come up again and again. So this is Matt Cheney, who's the managing partner at Chapter 3. And he said, I think the best developers are the ones who believe in the projects they work on. Passion can substitute for a lot of experience. And if a developer cares about their work, they will almost always do much better than those who don't care, even if they happen to be a technically stronger developer. So there are many, many, many routes to professional development. And I hope to put together a whole nother session that just talks about resource options for the different kinds of skills. So in this case, I'm going to talk about very high-level lessons learned along this road about getting mad skills. And the first is to become an expert in what you love. If you do what you love, you'll love what you do. Not everybody, or excuse me, not anybody will have expert-level skills in all the different categories. There might be a few, but I don't know if I want to know that there is. And then brand yourself according to your strengths that teams don't expect you to know everything. They expect to be able to coordinate strengths in order to accomplish the task that needs to get accomplished. So if you're very clear about what you love and what your strengths are, it makes it a lot easier to apply those strengths to solving problems. Do the minimum of what you hate, because if you do what you hate, you'll hate what you do. And then create alliances to compensate for weaker skills. So for example, working on my own, I am not a designer, and I am very, very much not a designer. So it was very important to me in order to meet the needs of clients, it was very important to me to have good relationships with people who are. And within teams, even though we do try to always be raising each other's skill level, which is part of the agile process that we are very devoted to, still some people will have strengths and some people will have weaknesses, and we organize around those. Develop skills you either like or need, even if you're not particularly excited about learning a skill, if you actually have to apply it to solve a problem that you have, it'll be more enjoyable to learn than it would be if it was just a random next on a curriculum. And constantly develop the skills you don't have, I don't think there's anyone in this room who needs for me to say that. I know that a foundation of this work is certainly to be constantly learning and never be the smartest person in the room. And this goes back to the Charlie Sheen image of if you are the smartest person in the room, you're probably in the wrong room. You've probably outgrown that particular situation and that your skills will grow far faster if you're surrounded with people who have the very skills that you're working on. Okay, so here are the list of mad skills. HTML are, sorry, categories I should say. HTML, CSS, JavaScript, PHP, databases, excuse me, DevOps, systems administration, performance and scalability, Drupal site building, Drupal development, Drupal theme development, visual design, information architecture, user experience and open source involvement. So like I promised you in the beginning, we'll have a pop quiz. How mad are your skills? And again, really, self-assessment experience, the more new-agey way of putting it. Each category earns up to three points and you earn the number of points that represent your highest level in each category. So for example, zero, if you have no skills in that category, there will certainly be some of those. One for beginner, plus two for intermediate, plus three for advanced. So the instructions are very, very straightforward. Track your score, use text pad, a paper and pen, your fingers and toes. And it's as simple as that. Are you ready to begin? Okay, good person skills. You get up to 10 points if you are a good communicator. So if you are truly, truly brilliant at communicating about technical issues as they arise, you're a 10. If you absolutely never want to speak to another person for the rest of your life, then that would be a zero. Most of us are somewhere in between. Up to 10 points if you're a cooperative team member, I think that follows the same scheme. Up to 20 points if you're a cool person and seeing as you're all here, I think you're an all and automatic 20. And then up to minus 20 points if you are an interesting character string. So now we're going to move into the categories. You can score one, two, or three points. There's no way to score six. You're either a one, or a two, or a three. So HTML. Plus one, if you're aware of markup language and how it's used, you're able to view source and you can understand tableless layout. And let me add, these are general examples. If you have the sense that you fit into one category even though you might know something different from another category, it's not exactly what you know. That's totally fine. This is a self-assessment experience. Therefore, you have plenty of latitude. Plus two, if you write valid markup by hand, you understand cross-browser testing and compatibility and use debugging tools. So if you have Firebug installed, you're automatically plus two. Plus three, if you have strong web standard awareness, you know specific rendering differences if you have had to use them for IE6, that puts you here. Or actually, that's more of a CSS issue, isn't it? Familiar with emerging technologies, HTML5, for example. So hand-in-hand with HTML is CSS. Plus one, if you know how CSS affects style of pages across the site and you understand what cascading means in this context. And this is not for a beginner an easy concept to understand. Plus two, you write valid cross-browser compatible CSS files by hand so that you can open TextPad and write CSS. And you use debugging tools. So this is if you have Firebug installed and you use it regularly. Plus three, if you understand CSS3 in pre-processors, you're aware of emerging technologies and you understand performance and cashing as it relates to the front-end rendering of a page. JavaScript, which is my negative 10 subject. Plus one, if you know what its purpose is and that it's not Java. And it wasn't even meant to be funny that this is a very common misconception among people who are not yet familiar with JavaScript. Plus two, if you can traverse the DOM, you can use at least one library and can hook into events. Plus three, if you're familiar with emerging technologies, Harmony, for example, if you're active in the JavaScript community and or you're able to implement WebSockets. Which is an attempt at an example of doing advanced things with JavaScript. So if there's something to substitute for WebSockets, feel free. PHP. Plus one, if you understand that it runs on a server and is a programming language. In other words, you can describe the difference between dynamic and static. Plus two, if you understand basic programming functions. So variables, arrays, functions, if-else statements. You can read code and edit it. So if you look at a piece of code, you have a general sense of what's going on and you're able to make changes in how it functions. You can perform single-line database queries. So select and insert. Fine if you don't do complicated joins or subqueries. And that you understand what object-oriented is enough to be able to make use of classes and objects. And plus three, if you write classes, if you write them from scratch. So if you're able to just open up and start creating your own class and the harnesses to run them. If you apply the big O, which is attempts to write code that runs as quickly as possible as appropriate. And if your code is elegant. And if you know elegant code from inelegant code, then that would be a plus three. Databases. Plus one, if you can create databases and users using the GUI tools. So in other words, you can open up PHP MyAdmin and you're able to create a database and users as part of the process, for example, of installing Drupal. Plus two, if you can execute queries, create tables, write semi-complex queries with maybe one join or one subquery or using the MySQL functions. And plus three, if you can tweak indexes, architect performance optimizations, write complex queries with multiple joins, and you can make sure that those queries are performant and run as quickly as they should. And you have experience beyond MySQL. So if you have worked with other databases, especially the newer technologies, that would put you at the three level. Okay? DevOps or development operations, this is all related to workflow. So plus one, if you can use a version control system for basic tasks, which I would highly recommend always all the time. And you have a separate dev environment from the live environment. So you're not editing the live environment as you're building it. Plus two, if you use version control on a team project, so therefore you are able to integrate it with other people working on the same code at the same time as you are. If you set up a development to stage to live environment, and by set up I don't necessarily mean the systems architecture that has to happen as much as the workflow itself. And also you follow a quarterly assurance process, so code reviews, for example, some way of checking things on stage before they're released into live, and that that's a consistent part of the work. And number three is you use feature branching, automated deployment, or automated testing. So now once you get into the three level, you are using applications to do the work for you. So hand in hand with this goes with systems administration. And when in developing this list, different teams organized to come up with the list, and we tried to mix and match so that you did have people without the skills in a certain area, so that they could speak for beginners, because one of the things we found is if you ask a PHP developer what are beginning PHP skills, they come up with a very different thing than somebody who's learning PHP. So we tried to coordinate them, and the interesting thing to me was for systems administration and performance and scalability, the developers most skilled in those areas were also the most verbose. We had to go through two or three passes to cut back on the skills that they were suggesting, which was a surprise, because in general they are not the most verbose developers that I work with. But when you ask about this, they have lots of great things to say. Plus one, understand major Linux package managers and can add and remove packages, configure repositories, perform common command line tasks, configure components on the LAMP stack. Excuse me, of the LAMP stack. Plus two, if you know the purpose of each folder in a standard POSIX system, can inspect and configure network devices in firewalls, create backup strategies, basic security, and if you can set up a new server or an instance in the cloud. And we had a bit of a discussion about whether it's POSIX or POSIX. Anyone want to weigh in on that? POSIX like PAW, yeah? Yes. You get a point if in general your skills match that list of skills. Yeah, so if you're missing one, or you have one that's not listed there, it would be really impossible to come up with... Well, no, I'm actually kind of motivated to do it, but I think it's kind of impossible to come up with a definitive list, yeah. Okay, and plus three for if you're... Excuse me, you're able to implement automatic configuration and deployment tools such as BCFG2 or Puppet. If you have advanced security knowledge, you can use penetration testing tools or set up intrusion detecting tools. Performance and scalability. Plus one, understand how clusters of servers can be load balanced, so you understand load balancing, and you understand the limitations of and can work with replicated databases. Plus two, if you write code that employs just enough caching, you're able to profile a site to discover where the bottlenecks are, and I have no varnish and memcache. I would say that you're able to... to configure those so that they're working on the site. And plus three, if you can use lower level OS and system profiling tools such as SAR-O profile, if you can design a scalable architecture and predict problems, if you're knowledgeable about cutting edge technologies such as NoSQL databases, excuse me, MongoDB, Cassandra. Okay, so the next group of skills are related to specifically about Drupal development, so before we move into that, we'll take a web chick break, and again, you're gonna see how the same kind of themes arise again and again. So Angie, when asked the question about the three traits, she came up with first taking initiative. It takes minimal energy to complain about something you don't like and a lot more to actually do something about it. This guy, Jay Thorson, for example, he got stuck in the project application Q-Hell, like all new code contributors do, and the normal reaction is to whine about the situation on IRC. Instead, he started reviewing other people's applications to try and prevent others from being frustrated, and then went even further to start churning out patches for test bot so it can do automated coding standard checks to take the burden off of project application reviewers. People who do stuff like that get my immediate thumbs up. And this is what we had listed as responsibility and ownership. Very much the same. So number two, civility and respect. It's natural in an open source community for many people to have many heated, passionate opinions about various things. It's also natural that we won't always agree. When I see people wade into these kinds of heated discussions and do things like summarize the arguments to date with objective, neutral language and state their opinions in a way that values the opinions of others, it puts a huge plus one in their corner for me. The inverse is also true. Regardless of technical skill level, I can't ever justify recommending someone who walks into a discussion with a chip on their shoulder and knowingly treats other people with disrespect. Interesting character string. And number three was a willingness to spread knowledge around. So people who contribute to documentation, people who help out in support channels, people who help others one-on-one at local meetups, et cetera, those people are solid gold in my book. This directly helps foster the community of mentorship that is the heart and soul of what makes Drupal great. And what I find interesting is when asked this question from people who have been working as part of Drupal development teams with some of the most brilliant developers in the world, they come back to things that aren't necessarily directly skill related, in other words. I mean, the skills are very important. Can't do our job without the skills. But it is other things that I think make those skills truly come alive. Okay, so Drupal site building. Plus one, if you can create users, content types, fields, create roles and permissions, create blocks administratively. Set up the basic, and we might say normal, multiple through the admin interface. Plus two, if you can install Drupal, add modules and themes in the right folder. And create views and use panels. And it doesn't have to be panels specifically, but a module that greatly impacts how the site functions. And you're comfortable being able to adjust and play with them and integrate them into the core Drupal site. Plus three, if you use features, which does not make everyone happy, there are certainly people who don't enjoy features. So you either use features or have a well thought out argument about why features is not something you want to use. You apply rules both for actions and layouts. You can implement complicated module integration or complicated views. And then Drupal development by this, I mean specifically custom module development or module development. So plus one, if you can apply a patch, understand hooks and can read module code. Plus two, if you can use the form API, hook menu and database API. And plus three, if you can write custom modules using Drupal best practices, that's a very important part of that sentence. Write custom Drush commands or cront tasks and write performance enhanced code. So adding slow code and not, I'm sorry, really having the skills to be able to understand how to implement especially the query heavy tasks I think is an essential skill for backend development. Drupal theme building, plus one, if you install a Drupal theme, customize settings via the UI, modify templates, make cosmetic changes to Drupal's default output. Plus two, if you can use a base theme or a sub theme, you can create custom templates. You can apply advanced front end concepts like accessibility and responsive layout. So this is, you can start with a sub theme and end with the look and feel of the site that you want. And then plus three is you create a theme from scratch. You use the template PHP to its fullest by using or creating theme hooks to modify Drupal's output or you can add theme functions to the module. So this is where you begin to change the functionality of Drupal itself in order to get what you want to use in the theme and then you're able to use it in the theme layer. So visual design. This is where I desperately needed the designers to guide me through these scale levels. So plus one, design software use knowledge. So in other words, I'm told knowing Photoshop is not enough. You need to know two or three of the usual design applications right from the very beginning. Know visual hierarchy of elements in design and have design static websites. So one of the things that they talked about was to have some design experience in a web page and understanding how those visual elements are different from other kinds of design. Plus two for designed logos, brand elements, and style guides. Design documents are organized and clearly labeled and you've done design for dynamic websites like a CMS. And plus three if you have a library of design tools and styles that are used to rapidly create elements, you can transform your own artwork into markup following the platform specific conventions and you design states of interactive elements. Information architecture. And the information architecture actually is very straightforward. Plus one, if you understand inflammation architecture is the foundation of a site. So you understand the importance of organizing all of the pages and content of the project because it will influence every aspect of the project laying the foundation. And then the two points is building the framework from that foundation. So you use personas and goals of the site to clearly illustrate the relationship of the pages to provide workflow diagrams and logical site navigation. So now you've used the foundational information in order to build a framework that the site will be draped around. And then the third plus three is the whole house. So it understands how aspects of information, architecture, and navigation can be translated into specific technology in Drupal. And experience implementing modules to aid in this process. So in this sense you think of the website as a system that is run by the architecture that's designed in the first place. And user experience. Plus one, if you know the difference between a site map and wireframes and you can build basic wireframes. Plus two, if you build user flow process... user flow process flow diagrams and detailed wireframes that illustrate the interaction patterns, if you're aware of recent trends and accessibility, that's always a tricky word, accessibility guidelines, and you consider major aspects of accessibility. So things like visual and hearing a payment, the higher level kinds of accessibility issues that all sites will want to take into consideration. And then plus three, if you perform user testing of all levels, if you have an expert knowledge of accessibility regulations and guidelines, so you really know what the rules are. And that you consider many levels of accessibility, not just the higher levels of visual impairment, but things that are a little less often considered like color blindness when designing a site. And last, but certainly not least, maybe we should have put this one first, open source involvement. So everyone is here, therefore everyone is at least plus one. Attend local meetups, use the issue queue, and edit document pages. Plus two is you volunteer at events, you help on IRC, you contribute patches, modules or themes, you propose sessions, and you helping out in the issue queue actually should have gone in this one. And plus three is you organize Drupal events, you become a community leader. So in some fashion, you take on the responsibility to build and work with the team to implement a solution. You maintain major modules, forks or distributions, or you contribute to core. So that would be a chance to add up if anyone needs that. So I use not particularly complicated math to come up with these numbers. So I wouldn't take them too seriously, but it does give you the sense of how from the lowest to the highest they might fall into beginner, intermediate, and advanced totals. So beginner would be negative 20. So negative 20 is you lost a piece and have no math skills whatsoever. To 28. Intermediate 29 to 57. And advanced 58 to 85. So keep in mind this is just for fun, like a Cosmo quiz. You know what a Cosmo quiz is? On the... It's a women's magazine in the States, and they always have the most ridiculous self-assessment quizzes, like does your lipstick color tell you about your personality? Those kinds of things. So they're not meant to be taken too, too seriously. So again, a last quote to reinforce how the original skills, what we were calling good person skills, integrate with the math skills. This is from Matt Westgate, the Lullabot co-founder and president. He's writing skills, communication skills, and a self-effacing quick-witted character. If they have these things they'll be fun to work with, add to the company culture, and be teachable and teacherable with our clients and teams. Then I look for Wicked Ninja development skills. So further info. I posted the list of these math skills that Aaron Stonich made visually attractive. He had the text document, and then he sent me back the PDF. Designers are just like magicians to me. It's amazing how they make things look good. It's on the Four Kitchens blog. Here's the URL, but if you go to fourkitchens.com click on blog. You'll see the link to this blog post that has the math skills so that you can play the home game. This is my Twitter so feel free to tweet and feedback and debate the many, many, many debatable choices for the what fits in a category and what's beginner, intermediate, and advanced. Also that's my email address so like most developers I'm about four months behind on email so don't take it personally if it takes a little while to get back to you. And then again I'll remind you about going to see Batman and going straight to Batman from here because they asked me to make very sure that we did. All right? So we'll have we have about nine minutes for questions if anyone has any questions. And then a presentation just isn't a presentation without some XKCD. So does anyone have anything they want to ask? They'd like to ask. I know you're all really super excited to get to Batman aren't you? Yeah. All right great then we'll end here. Thank you very much and have a good time tonight.