Category Archives: Software Developemnt

Apple Worldwide Developers Confrence #WWDC17 #YearOfTheEngineer

Each year Apple holds a Developers conference called Apple Worldwide Developers Confrence or for short WWDC.  It is a great place to learn and talk about Mac OS, iPhone Apps, TV Apps and Watch Apps. This year it was in San Jose, CA, USA and lasted five days.

It was a fun conference, with an incredible amount to learn and absorb.

Overall I would say #WWDC17 was the year of the engineer, they have given us so many great new APIs and better tools so we can produce some great experiences for our users. The AR/VR and Machine Learning tools are really setting a solid foundation for a interesting and diverse future.

Background

Early 2016 after working on mainly Web application development for a bunch of years. I took leadership of the Mobile Team at Enova (FinTech), which started with just working on an iOS App. Later in 2016 we eventually added an Android Squad. Last year the whole iOS Team applied for WWDC and none got a ticket, its a lottery chosen on your Apple ID.

This year when we applied we expected to be lucky to get one. So of course we got three! Nick a Senior iOS Engineer, Dan our Mobile UI Designer and myself all won tickets in the lottery. I offered my ticket to our other iOS engineers at Enova, they declined. So I went to #WWDC with Dan and Nick.

12B19236-5829-4B55-99C2-51B57BBCB294

Nick, Eric and Dan from Enova

Pre Confrence

There was 5300+ people heading to this the conference, which made booking flights and hotels fun.  The Hotels are booked through Apple and you need to move fast.

We all downloaded the WWDC App. In hindsight we should have also downloaded the Parties App.

As a team we discussed what we wanted to get out of conference, what sessions we were interested and discussed what questions we wanted to ask the Apple Engineers – you can book sessions with them and discuss your Apps. Great for both your designer and engineers. Not all the session are revealed as they will show up after the Keynote.

Day -1 – Sunday

Up early to travel from Chicago to San Jose.

Getting a conference pass was fast and easy for me. We all got a pin to represent our country, and set of Apple icon pins and a Levi Jacket.   Arriving at the Apple conference they had set up a outside garden with music, food and drink. The rest of team came through different routes,  we met up for dinner at MOSIAC.

33AE936F-E161-483A-8D1C-16BD54105373

The Confrence

Day 1 – Monday

I got into the lineup at 6.02am. I figure there must of been 1000 people infront of me. I saw people lining up at 7pm the previous day. The reality is that first few lines are saved for VIP and the media.

So you will be stuck in a line up for hours, getting to know the people around you is a good thing and helped pass the time. I met some interesting people from a NewYork Agency, Calgary MRI scanning, Day of Wonders, German Bank, Domino Pizza, Danish FinTech, and Canada RBC.

We talked about many things but there was definitely a couple themes of frustration around a lack of customer research and respect for UX in most companies when working on mobile. Most people seemed to build for a generic user. Others talked about Product Managers who did not really understand the differences between web app and mobile apps.

Once we got inside there was a light breakfast and coffee.. thank you.. after a total of 3 and half hours later I sat down at 9.44. I was in a centre block but a ways back. If you were smart like Dan who lined up after me he got a much better spot by checking where there were gaps i.e. single seats up in the front.

The good news is the room was big enough for everyone all 5,300 to get into the keynote room. Though room is fairly flat so having a tall person in-front of you is going to add hours to your neck dancing skills.

The Keynote was fun, and full of energy. Things that jumped out included iOS 11, Xcode 9, Swift 4, Metal 2, Machine Learning, ARKit, VRKit, Apple File System, and HomePod.  From a hardware perspective it felt evolutionary more than revolutionary. with the exception of the 18 Core iMac Pro of course. The real meat and a lot of it was in the software releases. All the things I wanted to see heading in the right direction. A lot of important things to take Apple Engineering to the next level.

Lunch – 5300 people is a lot to feed, there were a lot of places though both outside and inside to eat your lunch.

The Platforms State of Union – this got a lot further into key software updates – it was awesome with lots of stuff we can use in our day to day as an iOS engineer i.e. Xcode catching up with Android SDK, machine learning and a lot to do with testing…

Xcode 9 – Rebuilt Source Editor, Refactoring in Swift, Codable, Language Modes, Faster Builds, faster indexing, GitHub Integration, ViewController update, No need for Mac OS X Server (fingers crossed one day you can build on a linux box), Testing multiple devices at the same time, Wireless Development and a lot lot more..

iOS 11 – Drag and Drop (iPad), new PDFKit, QR Codes, new Video and image formats, Machine Learning, Metal 2 and yea much more.

After the team headed out to a Taurinus Brazilian Steak House – Happy Hour.  We recommend it, the grilled pineapple was amazing.  Than we headed out to find some random parties

I met a lot of App developers at the Beacon App Party from Dark Storm Comics, Historic house overlays in New York, a couple of the scholars and Apple engineer. Beacon is meet ad-hoc people App and a bunch of people used to find people with common interest at WWDC.

Day 2 – Tuesday

Actually had a light breakfast, as opposed to multiple coffees and head out early (7am) to see Michelle Obama. Her talk was down earth and full of good advice.

In another great talk that day Dr. Christine Darden told us about her journey from Monroe to NASA. I learnt a lot about sonic booms and how to reduce them.

Sessions for the day

The links are to Apples Videos, I will add my summary notes as I transcribe them. Note that links take you to the video page, but there is also a resources tab which includes a pdf of the presentation and full API documentation where relevant.

  1. Michelle Obama
  2. Christine Darden – From Monroe to NASA
  3. Your Apps and Evolving Network Security Standards
    1. New developments in certificate handling, TLS, and certificate status checking
  4. Privacy and your Apps
    1. Love CoreLocation When in Use
    2. Safari ViewController
    3. DeviceCheck
    4. Intelligent Tracking Prevention
  5. Swift 4
    1. Faster, easier to use Strings that retain Unicode correctness and add support for creating, using and managing substrings (only keeps what you sliced), Multi-line string Literals
    2. New Generic Features – where clauses, subscripts (PartialRangeFrom)
    3. Smart key paths for type-safe, efficient, extensible key value coding for Swift types
    4. Enhancements to creating and manipulating Dictionary and Set types
    5. Extends support of archival and serialization to struct and enum types and enables type-safety for serializing to external formats such as JSON and plist
    6. Enforced exclusive access to memory (Ownership)
      • Make it easier to reason about local variables
      • Enable Better programmer opt
    7. Access Control – private and extension work better together now
    8. Composing a class and any number of protocols
    9. Improving Cocoa Idioms – Smart Keypaths, Swift Archival & Serialization
  6. Introducing Core ML
    1. Bringing Sentiment Analysis, Handwriting Recognition, Translation, Scene Classification, Predicting text, Music Tagging and more to your device
  7. Updating Your App for iOS 11
    1. UIKit Bars, Avoiding Zero-Sized Custom Views, Margins & Inserts, Extending Safe Areas, Scroll Views, Self sizing Table views, Swipe actions,

Many years ago I met an amazing CTO/engineer (David Dossot ) in Vancouver, he now works for Apple so we headed to the Infinity Loop to share dinner at Cafe Macs. We had some great conversation and awesome food.

In a previous life I had worked at Apple, as a Genius in the Applestore in Vancouver, BC. Our training at that time brought us to Cupertino and CaffèMacs was my favorite place to eat for several weeks.

After I headed to Buddy build party, than the GitHub social and than Apple Social with a  live band.  Engineers I spoke to today included from Tumblr, another Creative Agency, a UK Bank and a lot of engineers from Vancouver, BC Canada (where I moved from before working in Chicago).

Day 3 – Wednesday

Sessions for the day

  1. Natural Language Processing
    1. Some great examples to get you started
  2. Debugging in Xcode 9
    1. Wireless Development, ViewController Debugging, NS Progress, Thermal Notifications, Performance Updates, Key Paths
  3. Whats new in Foundation
    1. File Provider Communication
    2. Improved NSString ↔ Swift String range conversion
    3. Discrete NSProgress support in NSXPCConnection
    4. Thermal notifications on iOS
    5. Copy-on-write NSArray, NSDictionary, NSSet
    6. Data inlining
    7. Faster calendrical calculations with lower peak memory
    8. Faster bridging of NSNumber to and from Swift
    9. KeyPaths
    10. Key Value Observing
  4. Essential Design Principles
    1. Why all of theses are important to you -> WayFinding, Feedback, Visibility, Consistency, Mental Model, Proximity, Grouping, Mapping, Affordance, Progressive Disclosure, Symmetry
  5. Advances in Networking 1
    1. ECN, IPv6, Network Extensions, and Multipath protocols
    2. An essential change in URLSession
  6. Advances in Networking 2
    1. New URLSession APIs to better handle connectivity fluctuations, to schedule background session tasks, and to receive progress reports for session tasks

Today I met a lot Gaming App developers and learned about their challenges.

For dinner Dan and I hung out with Jaqueline from Calgary first at the Fairmont and than the Farmers Union.

Day 4 – Thursday

Women@WWDC Breakfast

This morning was a little harder to focus, as I headed for Breakfast an Apple employee asked me “Hey you care about Woman!, you should go this Women@WWDC – knowing when to do what I am told  😉 I joined the session. It was really good – why Woman should have male allies, how to invite them and how to support them.

One comment really rang true, I have to be invited to go to a Women’s event.. in part because I do not want Women not to have their safe space. But I do care and inequality deeply frustrates (actually it make me angry) me.

Sessions for the day

  1. Core ML in depth
    1. Great Presentation with some simple examples that any engineer could play with
  2. Design for Everyone
    1. Learn how designing for accessibility and inclusiveness
  3. Advances in Core Image
    1. New ways to efficiently render images
    2. Custom CIKernels in the Metal Shading Language.
    3. CIFilters that include support for applying image processing to depth data and handling barcodes
    4. Vision framework can be leveraged within Core Image
  4. What’s new in Testing
    1. XCTEST Enhancements
    2. Async testing – XCTWaiter, XCTestExpectation
    3. Multi-app testing – App Groups
    4. UI testing performance – .first, Block-based NSPredicate
    5. Activities, attachments, and screenshots – XCTActivity, XCTAttachment, XCTScreenshot
  5. Whats new in LLVM
    1. API Availability Checking for Objective-C
    2. Static Analyzer Checks
    3. New Warnings
    4. C++ Refactoring
    5. Features from C++17
    6. Link-Time Optimization

Apple Bash

Fall Out Boy played at the Apple Bash, 5,000+ people in a park with alcohol and food. Not from the US I had never heard them but they put on a great performance.

IMG_1237

Today I met engineers from RBC, a Creative Agency, and several education App companies.

Day 5 – Friday

Women@WWC Scholars

A  number of the Apple scholars presented their ideas and answered questions from the audience.

fullsizeoutput_1fde

Maybe #woman would be more interested in coding if the examples for Computer Science courses were more interesting and not just calculators..

  1. Writing Energy Efficient Apps
    1. The cost for waking the radio is high
    2. Control retries and be mindful
    3. A number of specific examples
  2. Business Chat
    1. I can imagine a future where people could sell via chat, or we could support so much easier with customer taking a screen shot of what they are seeing, debugging will become so much easier whilst not awkward for customer and we could share videos of people solving common problems or take a screen shot or needed information. Or just pay with Apple Pay
  3. PDFKit – yes, yes, yes
  4. Design Session with an Apple Designer
    1. This was incredibly useful, we asked him to look at ourUK OnStride App

Talked to an iOS Engineer from Ticketmaster, two from Apple, and an education App.

Thank you

I deeply thankful that my company Enova sent me along with the team to WWDC and to all the staff at Apple that pulled together a most awesome event.

After Thoughts

Broad thoughts for the conference organisers:

  1. The quality of talks was excellent
  2. I love there were some all star woman i.e. Michelle and Christine and a lot of engineer woman presenting technical talks, as well as womane@WWDC breakfasts
  3. I deeply appreciate Apple is starting to sneak Peek future products
  4. I spent a lot of time in line ups – like hours and hours
  5. Meeting people was a little hard – some suggestions below:
    1. Ask when people sign up what they want to get out of conference for example I would love to meet up with other FinTech companies and learn from them. Make this public on a website or add it to our badges
    2. Or have a noticeboard for people to state what problems they are trying to solve, and types of people they want to meet
    3. Maybe support an App like Beacon to help the adhoc stuff happen
    4. Maybe have a recruitment board
  6. Maybe vary the music a bit
  7. Have big neon signs at the back of the hall so people know where they need to go when exiting or have the presenter tell people, it was very confusing on the first day
  8. Communicate more to people when they are lining up what the plan is and not just the front, maybe use your App?
  9. Overall the conference felt encouraging, positive and I learned a lot

Hints & Tips for Attendees:

  1. If you win the lottery, book your hotel and flight fast
  2. Book the parties fast – There is sometimes a list and there is a party App. Some of these go with 15 mins of becoming available
  3. Consider booking the place you want to have dinner as they fill up with 5,000 extra people in town. We just went to dinner early, where we could
  4. When booking appointments e.g. UI, App Store, they open at 7am (for that day) and they literary all go within 60 seconds. Be ready and ensure your internet is ready
  5. Use the Lab sessions to troubleshoot the new software release and your App
  6. Bring Business Cards, you meet a lot of people and maybe never seen them again
  7. Bring water and snacks for the line ups
  8. If you are alone do not be shy in grabbing those middle empty spots in the KeyNote
  9. The Platforms overview talk is the place that it really gets real for engineers
  10. Prepare for the appointment sessions, make sure your App is working so you can show them. Know and target you’re areas of weakness.
  11. Note all the extra conferences that appear around WWDC

San Jose

So a big plus the Airport is close to the centre. There are a lot of places to eat, most of the week the centre felt lacking people. Friday night was like the whole place was invaded. There were a lot of humans. Most of centre area was very walkable.

Call Outs:

  1. Social Policy offers good food and coffee, the seats rely on perhaps some extra cushioning you may bring with you
  2. Taurinus Brazilian Steak House – was good and has a happy hour at 5pm to 6pm during the week
  3. Farmers Union – good comfort food and we had great service
  4. San Pedro Square Market – A great range of food

Post conference

I booked my flights late so most of my options were 18 hour trips with connections. So I took the next direct flight leaving 10pm Saturday. This gave me the opportunity to update this blog, consider the upgrades that Apple presented this week for Enova and what we needed to do vs. wanted to do. I also got the opportunity to catch up with another Apple Employee and friend Jerry who works in Apple University. We spent a good six hours talking about AI, tech, education, science fiction and writing.

Surviving a Technical Interview

Over my career as a software something, I have had a bunch of technical interviews.  Some I have done well in and some I have not.

The first part of this journey was understand something for myself. For the interviews I performed poorly in, about 50% of them I actually knew the answer, but could not get it out. Why was this?

The second part was as I led teams, I wanted to find an accurate way of assessment where a person was in their journey, whether they would stick with it, and whether they are a good fit for the rest of the team.

Here is the presentation I did to a lunch and learn group at CodeCore:

I feel many Technical Interviews fail to do their job properly.  Whether the process is not well enough thought out, the people involved are not trained, whether interviewers are evaluated higher for their technical skills but not their people skills, or they really just trying to get extra “clones” of themselves. But without a doubt the worst is, there is a lack of reflection and accountability for the actual success of their chosen candidates.

Still too many questions are on topics or specifics that the interviewee will never do in their actual day to day work.

So many people conducting technical interviews fail to imagine that this is a two way process.  That the “employer” is actually showing the future “employee” how they work with people.

All of that said, some are getting right and it is not from the traditional “hazing” approach, but a more collaborative approach, where the potential “employee” show a project they have worked on, where the interviews feel like a great passionate conversation..

Railsconf 2015 – Being a human, Atlanta, Race and community

This is my third RailsConf, having attending them in Portland and Chicago.  I have found the Rails community as mostly open, people generally easy to ask questions off, and a good range of talks.  Railsconf are well organized conferences, they feel professional and evolve each year.

Rails conf

This year the courses seemed to concentrate between the beginner and the intermediate with occasional spikes into the advanced.  A lot of the course titles were a little abstract and thus encouraged you or discouraged you (depending how tired you were) from reading the actual description.

It was noticeable this year the number of women that attended (i.e. a larger number) and equally notable how few Blacks there were attending the conference.  There were a lot more talks about how software developers are human and soft skills.

The main thing I get from the conference is the people I meet, the conversations I have, the things I learn from attendees.

Keynotes

I felt all four were really good and worth attending and worth watching when they become available.

DHH Rambled a bit, but got to a good point that Rails is a backpack to build a medium sized company like Github or Shopify.  He took on the criticism about Monolith architecture and termed the phrase Majestic Monolith and ‘integrated systems’. Again this created some great lunchtime and evening conversation.  We also talked about two features in development for Rails 5 Turbolinks 3 and Active Cable. His talk.

Sarah Chipps talked about her journey.  I love that she gave up part of her talk time to some students and their journey to coding and drones.

Aaron Patterson did his usually trolling and then talked about the areas he is now working on – some great stuff on controller and integration tests. I love that he walks us through the process, I learn each time he does. His talk.

Kent Beck did an amazing talk about what he had learned over the last 10 years about how to be a developer at “ease”, not lazy but productive, challenged and accountable. His talk.

The Confreaks railsconf 2015 youtube channel has these talks in them. And they have their own list of talks here.

Talks

I found that day two and day three had more topics I was interested in. Here are some of my favourites:

1795499_10155456889030545_4691949337144728183_n

I heard some good things about:

New things at the conference

Rails core team

Each year the conference improves 🙂 I am impressed with how well organized overall the conference is for a non-profit organization relying on volunteers.

  • The theming of topics was really good and helped participants navigate talks
  • The Rails core team talk was very informative
  • Having many big boards with schedule on, was great
  • Having a mobile app was very useful
  • I think the notice board was a lot bigger
  • Lightning talks had a lot of talkers
  • Separate page for sponsored parties.  It would be good to have this one page for all the after parties.  Often they get booked really quickly but only the people in the know.

11188303_10155456889290545_2428863269288886589_n

11169786_10155456889405545_5336339072540946363_n

Old Things and still good

Scholarship

Railsconf has a scholarship scheme which gives free tickets to a number of people who are coming to the conference for the first time and might otherwise be able to.  I love this.  I was a scholar in my first year and have being a guide in the last two.  I think Ruby Central is awesome to provide this.Lightning talks list

Lightning Talks

Are a great way for people to try out presenting or were not able to be fitted onto the whole schedule.  I would suggest moving this to a morning, they are good but often get tagged on the end of the day and maybe a little tired.

Guide

This was very useful with both the schedule and the map. Meet the team is a nice touch, maybe add what role they are playing at the conference.

Labs

I loved this, I feel having more would be great, I suppose I miss the fourth day!

Venue – The Mart

Of the three RailsConfs I have attended, this year there was either a lot of noise pollution (e.g. Bang Bang, or the equivalent to a freight train going over your head).  In the main room there was a lot of echo, if you managed to avoid the really big pillars.  In the smaller rooms, there were several issues with the projectors not being powerful to counter the lights and no one knew how to turn the lights down. All of that said this was the best WIFI hands down.

Sorry this was not a great venue.

many people

Food

The first lunch was a little light. The second and third lunches were really good. The snacks were all gone by the time I got there, though there was fruit 🙂

Was it worth the trip?

Conferences are essentially a social experience, as most of the videos/decks appear online, thus the most valuable part is the people I meet at conferences. I wonder what the future of conferences is, with all the content being streamed, will they become totally virtual or in fact will they become more social.  The problem with big conferences is that you can get comfortable with sticking with your team or people you know and not meet new people. For me this is what I get:

  • I meet new peers and mentors
  • Discover new perspectives
  • Discover how others solved a similar problem
  • Share what I know and become a useful part of the community
  • I can ask questions in talks to clarify my understanding
  • Sometimes a talk will teach you something new, or you learn to communicate something complex in a new way or you realize that you know this topic.
  • Find people you want to work with
  • It was not my favourite year for talks

But I am an extrovert, I will actively introduce myself to a lot of people.  That said it tires me out!

This year I sent three people and myself (from Vancouver, BC). There were some great talks, but more average talks then I had seen in the past. I feel the social aspect is one of the areas we could evolve and make the conference even better. It is also what I think will keep bringing people back. For the social members of my team the conference was good, for non social the talks were not compelling enough on their own this year, in part due to the level of expertise and in some cases because of venue distractions during the presentations.

Team

Ideas for next year

Its not just our code base that needs to evolve and grow, the conference does to, here are some thoughts/ideas/suggestions that may improve the experience.

1. Making the conference more social

You can see all the talks online, why attend if not for the social aspects?

  • Publish the attendance list. As people register, ask them Name, Company, Title, length of time coding, and what they want to get out of the conference.
  • I suggested a couple things last year in my rails 2014 blog and rails 2013 blog 
2. Upping the quality of the talks
  • Coaching for first time talkers, from communication experts, education experts and experienced presenters (I will volunteer for this)
  • Learning style guide – help speakers think through the styles to make easier for all to absorb
  • Feedback for each talk by participants to be fed to the speaker, this would be great in mobile app
  • Room instructions – How do I turn lights down/up, who fixes the projector
  • Pretest room for computers and projectors
  • Hands on masterclasses and workshops with very experienced people like Metz and DHH
3. Interview DHH

This would be even more fun if it was Aaron Paterson who did it..

4. Grow the conference committee to include people who have sole responsible for:

Scholars champion – Have a person own this and evolve it each year. Make sure there is a table that scholars can go to and make sure they have space to see the keynotes, check on the beginners track to ensure the content is actually beginner friendly.

Connections champion – Work in ways to help other newbies/lone travellers meet others. Be the person who can introduce people to other people.

Presenter Experts Volunteer Pool – Ask the community to apply to help out first timer presenters and those that would like a sanity check pre-conference and in-confrence.

5. A non interruption space and a “singles” want to meet people space

Most of us occasionally need to work/code get shit done.  Maybe we could have a space when we have power and can code without interruption or sound sshhh. And then another space where I will code/play/experiment but happy to be meet people, in fact please interrupt me. Its kind of like a singles bars, in that it is easier to approach people, making it a bit easier for all.  You could have board with I would love to speak to people about x and here is my twitter handle (in case I am not in the room at the time you step in).

Atlanta

Great food and calming accent.  I also visited Martin Luther King jr. centre and Human Rights Centre were emotionally overwhelming as well as educational.

Race

Martin Luther King jr.

There was a stark contrast between the Race of the attendees of the conference a lot of white and some others, against all of the people who served the food and drink who were Black.

Rosa Parks

As a community I think we are welcoming.  Bootcamps seem to help those with money.  Ruby Central offers scholarships (reduced ticket price to free) for all minorities and those with little money, which is awesome.

I feel the lack of certain communities in software development is not just a Rails/Ruby problem, but wider.  I wonder what we can do as a wider community to add more to our diversity? We are after all in the hometown of Martin Luther King, Jr. Is it an issue of poverty, education, role models or something else. How do we make it better? If there is a software community that could consider this and maybe make it better – I think it is the Rails community…

Roles people play

Leading software engineers

A friend (non technical) recently asked me how I lead my dev team, he had led product and marketing before, so I have attempted to focus on the differences, that said good team leadership has commonality with all disciplines.

I currently have three software engineers, one IT/Dev OPs and one product designer (3 female and 3 male).  In the past I have led 23 teams. I will use this blog for my team to hold me to account 🙂

Casting Workbook Team

No Surprises

Being accountable for “no surprises” is the core. Where ever possible you should be accountable for all of the people that you work with, people should not be surprised by what you say, because you have already asked their opinion, maybe even evolved your thinking and they can see the process by which you went through to reach a decision.

It means more communication and more interaction with your people. It means you can be vulnerable. It means stepping outside of your “assigned” responsibility and forming relationships with all parts of your organization, and other organizations. Its about being connected, its about being a leader and a follower. It shows that people understand you and your core principles.  That you can be consistent and when you adapt they can see that to.

There are not things left unsaid, you are not passive aggressive or have control issues.

Being a Leader of context

The role you take on should change depending on the context.  Sometimes you are the coach, sometimes the mentor, sometimes the friend, sometimes a psychologist, sometimes the engineer, sometimes the product owner, sometimes the user advocate, sometimes the engineer advocate, sometimes the leadership context, sometimes the inspirer, sometimes the critic..  There are different leadership styles and yours should adapt.  In 2003, prior to my MBA this book really helped me step up my game The New Leaders: Transforming The Art Of Leadership Into The Science Of Results

You are the right person at the right time

Different places/ways to work

People are generally smarter/productive longer, when they can have different types of environments to work in and have multiple ways to express themselves.  Have multiple places that engineer can work in.  When I recruited my current team, I got the organization on board with the following:

  • Give the engineer a laptop
  • Have somewhere comfortable to work e.g. sofa, kitchen
  • Have somewhere serious/quiet with extra screen
  • Have somewhere they can stand up and code
  • Have somewhere outside if possible, natural light/fresh air is a great refresher
  • Make it possible to work remotely
  • That there are white boards for people to express, figure out a problem.

This is a good book if you want to really consider your culture and the way you work. The Best Place to Work: The Art and Science of Creating an Extraordinary Workplace.  Without doubt you should ask each team member what helps them concentrate, what distracts them, what they need to stay in the zone.  The obvious big one for many is a good set of headphones. Do not underestimate the quality of a good display also, anything at the quality of a Retina can reduce eye tiredness.

Different physical environments can refresh you, help you think bigger or focus. Be flexible.

Leave chunks of time to code

Engineers are generally more efficient if given chunks of time to code.  Thus have your meetings meetings near mornings or lunchtime.  To give several hours of interrupted research/code time.

  • Get engineers to block out their time on their calendars, so product/founders can book time when needed
  • Use an IM system to ask questions such as Slack or Skype during those chunks of time and do not expect a quick response

Developers need chunks of time to be left alone to get on and focus

Being a good human being

This means understanding each others needs and wants. Expectations both from the lead and engineer should not be hidden, things should not be left unsaid.  Sometimes we need processing time, to check in destructive emotion, but you should still tell that person how they made you feel. You should also be kind but not nice.

Both people should be able to be vulnerable with each other and trust each other.  You both need to avoid surprises.   This is done through good communication, which is not common and takes effort. This needs time together.

  • Feedback in the moment, always ask permission before giving feedback and make it about the behaviour you saw.  Do not assume intent, in fact assume positive intent. Give positive and negative feedback. Understand how each member likes to receive feedback. This is my slide deck from teaching my teams about feedback.
  • Weekly One to One checkins 10-30 mins, any fire issues? any smoking issues?
  • Monthly sit down at least one hour.  I have a list of questions to always go through, which we agree when we start together.
  • Allow others to lead, giving opportunities to members of your team to lead on a project/task whatever you do not need to be the boss of everything.
Question set for monthly
 
First conversation should be to agree the questions, here is a starting set.  They should based around the culture we wish to create and how we want to treat our people
  1. How are you feeling? Any hot issues we should talk about?
  2. How are you contributing to the company and your team?
  3. Are you a Team player? How are you involving others in your process?
  4. How are you growing/learning? Are we are helping your reach potential? Do you have mastery?
  5. What are your Technical Capabilities here? Where do you feel competent? 
  6. How are you helping the company grow and evolve?
  7. Are you Hungry? How productive are you? Are you taking inspired action?
  8. Do you have a friend here?
  9. Do you have a mentor or coach in the company? Are you coaching others?
  10. Do you want stay with the team and the company?
  11. What can can we do better as an employer/me as your leader/CEO?
  12. Do you feel you have Autonomy? Are there things stopping you doing your job?
  13. Do you feel you have Purpose? Do you understand what we are building and why?
  14. Are you contributing to the wider community? What can we do to help?

One to one, face to face is the highest bandwidth of communication

Your processes and system should evolve.

The way you do things should be Agile (as originally intended i.e. flexible and evolve NOT rules).  Agree a workflow together from product to engineer.  It should change and evolve to be right for the context.

  • When starting with a team, I will audit all current systems and ask for each members views privately on each tool/system/process, to ensure the less confident or shy people get their say
  • I will then have a team meeting to review what we need and what we like
  • Any team wide system change should involve all parties
  • Deadlines should have engineer involvement and not be dictated downwards

For example in my latest team we discussed the tools we wanted and we decided to use

  • Slack for IM
  • BaseCamp for idealization and research
  • Github for product/features/user stories and code/issue management – The way we used tags evolved several times.

Freedom to solve the actual problem

Sometimes Product/founders/Engineering leads may try to solve the problem in their way i.e. micromanage.  Giving the engineer the “code monkey” role of just coding to a very prescribed way i.e. an exacting feature.  Giving no space, to actually problem solve can be very limiting and create an environment where creativity and innovation are stifled i.e. the evil called micromanagement. Most humans do not like their freedom taken from them.  So find the the right balance between the organizations’ needs and the employees. That said some people like more structure, context matters.

  • Give space for engineers to solve the problem in their way. If you are already using Agile then you may evolve the story a couple times as users respond to the work.
  • Within the user stories/feature requirements do not limit.  Ensure you actual describe the problem you want solve, suggestion ideas/solutions but where possible do not dictate
  • Involve the team in talking about the features and discussing possible approaches, but the actual engineer who takes the feature gets to decide
  • Engineers should have some understanding of the customers. Ensure your engineers meet customers, and spend time with your Customer success/relations people.
  • Keep the engineer accountable for the response by users. Thus have good monitoring software and have a culture when engineer go back to check the real world implications of their work.

Micro Management is the evil of leadership, it kills creativity, innovation, trust, and growth. It can appear both in a manager and in the processes you impose on your people

A culture of science

Scientists experiment many times and fail many times and one day they get it right.  Encourage a culture of learning from mistakes not teasing/persecution which means encouraging experimentation and forgiveness.

  • Discussion should be based on logic in reference to code
  • Create an environment where people can I say “I do not know.. but here is an idea/feeling/instinct”
  • Call people out if they tease others about their failures or use it to argue they case in a discussion
  • Careful to not let irrelevant aspects enter into the discussion such as gender, race, age or sexuality. I say careful because humour can involve these but they should not sway discussions and the receiving of the humour should not be hurt.

Experimentation and failure should be Ok, team members should not “haze” each other. Leadership need to be able to move on

To build a team well, needs reflection and the teams involvement

The team needs time to connect as a team and evolve together as a team.  We have a book club where we talk about the teams performance in terms not related to code. How good are we at communicating:

  • Giving/receiving feedback
  • How do we react to others ideas?
  • Who do we go to help us through problems?
  • Who pair code with more often
  • How much do we know about each others strengths and weaknesses?
  • How vulnerable can we be with each other?

We used The Five Dysfunctions of a Team to kick start this conversation.  Every couple months we take time to talk about how a team we are in terms of communication. You need to invest in the actually team to have a team..

You need time for the team to talk about the team, spot weaknesses and evolve

 Ask your people how you are doing

“How am I doing?” should not be a hard question for you.  Ask it informally in your one to one monthlies and formally at least every 3 months.  The no surprise rule should be for all. It should be 360 your leaders, peers and your people.  Find out if people get what they want and what they need from you, in terms of communication, conflict/challenge, advice and performance.

You learn faster by other people telling you what you are doing right and wrong

Collaborating with your leader

Hopefully you chose your boss carefully when you were recruited into the organization.. but things evolve, so maybe that perfect person you went to work for, moved on.  I have found the best leaders are those who keeping growing i.e. they read about how to be a better leader, they can be vulnerable with you and you can talk openly.  When you make mistake your instinct is to tell your boss, when one of your team performs really well you never feel the need to take credit and generally you have no fear of your boss talking to your team.  If you do find the above hard, understand why.

  • Never underestimate the amount of time you will need for your leader
  • Know each others strengths, weaknesses and blind spots
  • Find those things you really enjoy about each other
  • Find those things that you find difficult and talk about them
  • Build strong relationships throughout the organization, ensure all find you approachable

Success in any organization is about working together and helping each other evolve

Adding to the team

Whilst you as the lead will drive this process, you should involve the team in the process. You should ensure everyone is trained and good at the interview process.  This may mean mock interviews, where your team interview you. Its worth noting that you do not want more clones, you need different types of people, skillsets, who sometimes will clash, but have the communication skills and reasoning capacity to grow from each other.

  • Be clear what the team is missing and what you need
  • Agree on what you are looking for both terms of technical and personality
  • Ensure the all those that are interviewing try out their questions, again no surprises
  • Have space for something social
  • The best interviews are like a great chat amongst friends about something technical
  • Personally I hire on communications skills, problem solving skills, learning capability and then current technical skills
  • I often look for potential as much as current craft capabilities
  • I do not hire more of me, I want diversity
  • If employing someone with less experience, be clear what the areas are and put in place a training program to fill those gaps.

I look for growth potential, hunger, curiosity, pro-active, problem solving capability, how they will add value to the team and how they will help the team evolve. Then I start start to consider technical experience.

Software engineers are great problem solvers

Sometimes we box people into a role.  Humans are so much more than their job title and job description. Most people are capable of applying their skills in other domains.  You have a problem, why not ask a software engineer?


I will keep adding to this blog as I learn.

Hacking Health – Gaining a suntan in Whitehorse, Yukon whilst coding

I headed to Whitehorse, Yukon, Canada to spend the weekend at a HackingHealth weekend. It was an amazing weekend because of the people, the event was interesting but the people I travelled with,  those who I met from the Yukon and the health professionals who shared their lives were awesome.  This will not be the last time I spend time in the Yukon 🙂

Most of the event was tracked pretty well on twitter #hhnorth14

Yukon

Finding developers

Alex Greenhill asked if I would be interested and if I could get 6 other developers, the event would cover the hotel and flights.  I advertised on all my social media and the ruby meetup group, django meetup group, Node.JS meetup group. Meetup.com only allows you send messages on 3 separate groups per day, new learning. On a side note it was interesting to see how each meetup group had their pages setup, some had admin needed to forward email, some had a group email and some had a separate discussion groups, with threads.

Anyways during the course of a day I had 40 people respond and another 20 over the weekend. First come, first served, and only those with full web stack and/or Android/IOS skills.

Early ideas

There was a Sparkboard platform which was a great introduction to ideas (Built by Matt Huebert in Node.JS).  Here is this events collection.

Vancouver Team is set

 Friday – Meeting the team

Vancouver HackingHealth Team

We were a real mix of personalities and backgrounds. Amazing bunch of people.

The Yukon hospitality really was evident from the beginning, we were picked up from the airport shown and around and dropped off at the Hotel. It was hot here, I needed my shorts and suntan lotion!

The Venue – Kwanlin Dun Cultural Centre

It was an awesome venue, big place, big kitchen and you step outside and it was so peaceful.

Kwanlin Dun Cultural Centre

The teams and ideas

All the ideas were given 60 seconds to pitch their idea. And then everyone talked to people, to discover which team to work with.

I had some great conversations with doctors, nurses, social workers and other technologists. I learned so much about Health in Canada but also about health in the Yukon.  And it did not stop there I learned a lot from a social worker there about the local issues, culture and their specific problems.

Brooklyn and I noticed that health discovery was mentioned in a number of projects, so we felt that if we abstracted this problems we could in theory support all three of those projects.  We decided from the gecko our purpose, we wanted to build something that help others build out their software quicker.  Hopefully allowing participants at Hacking Health to build something greater.

Food
So a lot of the food was made in the next door kitchen by volunteers.  It was a good variety of health food and there was often vegetables and fruit available through out the day. Some of the food was made by the Alpine Bakery, yum, yum..

Whitehorse, I like it..

You know I love small towns, where people will look you in the eye and smile. When conversations are easy to start and continue. I suppose its the county in me, people that just enjoys people, and when we don’t we loose ourselves in nature.

Like seriously where else would you be invited to paragliding for day, join a family for dinner, go to a wedding, asked you want to go fishing, bought a couple rounds for drinks, get a bunch of invites to cabins to drink, where you would get a free guide to show you around — at Whitehorse, Yukon, Canada

Saturday – Day of coding and interviews

A lot of the day was spent coding, with breaks to interview different health professionals as they came in, about the health care system and the Yukon.

Interviews – Physician , Nurse, Patients and social workers

Turnover is higher in remote areas, as people come for their “Northern Experience” and return. The work is very varied and you have less choice to specialize or not to do, work you do not like. The work can be “brutal” and its likely most of your work will be related to alcohol or drug addiction.  Everyone knows everyone so people notice if you go to a sexual clinic. People are not aware of what programs are available and awareness of new people takes times.  Most doctors are self employed and are paid for “fee for service” i.e. paid for appointments, that doctors are not paid for preventive care, thus they reword the appointments to get the patient what they need.  The Canada Health Act responded to doctors not taking enough appointments, but has created a situation where preventive is not valued and that doctors do not get paid for going to community meetings.  Building trust takes time with remote communities, turnover hurts more than in the cities.  People are often confused which service they should access.  A number of people stated they were often confused by language used by Doctors and what was on the websites.  It was mentioned a bunch of times it was not clear what services could actually offer.

Learning about life in the Yukon
Most business is done by phone not by email. Here there is no phone signal between towns. Most have blackberries if they have phones at all. WIFI is uncommon. There is no Rogers/Fido up here. There are a lot of cabins, with no power, or running water. Most cabins need wood stove to survive the winter.

Helicopter trip

During the day there was a fair with a helicopter ride.  It was a lot of fun.

Sunday – building the pitch

Health Geo was our pitch.  Saturday Brooklyn and I coded a lot. Sunday was split with me building a pitch and Brooklyn finishing off the basic funcationality.  By the end we had a working project which would allow you put in locations add information for each of those locations e.g. abilities, symptoms.  It took us longer then we suspected it would.  But we both know a lot more about location services now!  It was not pretty but with just a team of two it worked.

https://github.com/ericbrooke/healthgeo

There eight pitches left out of thirty ideas.  We each got three minutes of pitch and two minutes of Q & A.

Judges

Astronaut talk
David Saint-Jacques (@Astro_DavidS) spoke of his journey to almost become an astronaut and training he went through. I really enjoyed it and he came over with confidence and humality.  He later came out for food and drinks. A good guy.

Astronaut talk

Awards

Awards were given out to six of the eight pitches. You can see their spark board summaries here.

With a double award (Popular vote and Health Tech consultation award) going to voicemail for the homeless, using Twilio as their base technology – ReachMe led by Leigh Ayton, social worker .

  • “Yukon Baby” for winning the Design Consultation award, led by Chris Nayor MD
  • “COPD Action Plan” for winning the Bonnie Walker commercialization & consultation award, led by Bethan Davies, health professional
  • “RelievR” for winning the Outside the Cube consultation award, led by Jonah Marek MD
  • “3D-printed finger splint” for winning the Technology Services award led by Sam Fleming

Dinner and Drinks

After the work it was time for some fun. We got a space at the Klondike Rib & Salmon Barbecue, the food was great and the waitresses were sassy, one even took a sip of my drink to make sure it was ok 🙂 After we headed to join the organizers, volunteers and an astronaut to drink further.

Bison

 

Heading out of town we went to Andrew and Alyissa’s cabin for drinks and a campfire.  It never seems to get completely dark here. Thanks to Sam for driving us out and Jayden on the way back

IMG_0067_2

The Whitehorse team and community

I feel incredible grateful to had the opportunity to be a part of this. This event felt like no other Startup Weekend/Hackathon I had ever being to. It was clear people had put a lot on hold to get this event up and stay running. There were many stories of things falling through yet Ben Sanders and the team, kept it on track.  Ben, Andrew, Alyissia, Aarti, Shreya, Tina, Sam and all the others behind the scenes – Thank you 🙂 I wish had worked less and got to know the rest of the volunteers more.

Developer Retreats

I think Whitehorse would be a great place, where people come up for a couple months, working on their own a software project, maybe they could get a reduction on rent and food for working on local community projects. 

Hacking health volunteers and organizers

Suggestions for Hacking Health:

The event was fantastic, here are some ideas to build on the great work you are already doing.

  1. There should be a pre briefing about the local health/social issues.  This could be a Youtube video or it could be the first session where all can get involved. Either way this should be pre pitch.
  2. Judging panel should have one developer on it, this is a combination of technology and health after all.
  3. Create a list of all ideas at HackingHealth events and a list of all pitches given.  Sometimes ideas help others develop better ideas.  Also people with similar interests may find each other and starting building together outside of the actual events.
  4. It would also be great to have a quick reference guide to all the privacy limitations specific to the Province / Nation as Hacking Health is international  (Seth)
  5. Health like Education has the great potential to build lego blocks that other teams in the future could use. Encourage people to share and build for future hackathons. Most projects are too big to build alone. As developers we are often abstracting the problem, as we see common problems in different places, we are not limited by departments or silos, we look for the common problems and then common solutions. Most of the code used in one hackathon could help other hackatons build more, or even just copy and thus build complete solutions.  Encourage this behaviour and bigger things will happen.
  6. Jesshan and Matt you should tell your story on the About section of Hacking Health.

Monday – Getting out of Whitehorse and into the Yukon

Some of us stayed to enjoy more.  We took a short trip out of town to see mountains, desert and grizzlies. Thanks to Corin for the tour and Chris for driving..

Grizzilies

Carcross Desert

Feelings

Some places touch the heart, this is my attempt to describe it.

Whitehorse, Yukon

A moment in time, stillness

The sun down beat and I could hear the water

A bird called out and there was only the wind in trees

The view reminds you, of smallness of you

 

I turned around and there the humans be

Friendly, sassy and unafraid

They will look you in the eye and walk into your life

You walk into a bar and sit and you do not have to be alone long

 

Its not all pretty, you have to think ahead else nature will take you

There are few of the those fancy things that make you lazy

You trust in your people, your truck and dog

but that cellphone no work much

 

Whilst there is much light, the future is uncertain

There are many opinions of the road ahead

They agree, that there mountain be grey

But whether civilization should come on down, there are differences

 

This is a place to be close to nature, with light feet

A place to get shit done, to take a moment and reflect on the past and ahead

A place of good people, the practical, escapists and survivors

A place closer to the heart and a drink or few

 

railsconf 2014

Chicago

Overall I enjoyed this conference more than last year. I am now 15 months along my journey into Rails/Ruby.  I considered whether my enjoyment was because I understand a lot more rails and ruby, of course that is a part but not the only part, the people, the sessions and Chicago all made a contribution.

There were many amazing talks, good workshops and I met a lot of people.  I thought all of the keynotes added value to my thought process.  My favourite talks were from Sandi Metz, Sam livingston-Gray and Adam Cuppy.

I am adding all the resources I find to the bottom of this post, including photos I took of the job board.

You can find the keynotes here http://www.justin.tv/confreaks/videos and here is an amazing set of photos from railsconf https://www.flickr.com/photos/justingordon/sets/72157644405839722/

Be warned I will keep updating this page! Agile page production 😉

Prequel – The day before

Getting to Chicago I flew in from Vancouver, BC.

Guide and scholar

Last year I was a scholar so I was given the opportunity to attend for free RailsConf 2013 because I was a student and a newbie to rails.  This year I wanted to help a scholar and be a guide.  This started the night before the conference starts where you are matched with your Scholar and you get to know each other.

After we headed to Howells and Hood, couple blocks away it had over 100 beers on tap.  Jeff Miller (from Enova, they are hiring) also bought us a couple rounds of drink and introduced us to Enova the company he works for in Chicago.  The drink and debates were passionate, we talked about each others path to Rails, where juniors can get jobs, the things you should learn at the beginning of your career, tech interviews and who was employing juniors.

Day One – Tuesday

Breakfast, apparently the most important meal of the day. We found Yolks a good breakfast place which was located just a couple blocks away.  It had a great menu.  I ended up eating breakfast with a couple randoms and a team from (NextGear Capital).  I was impressed in the diversity of this tech team and they are on a hiring spree.

Yolks, Chicago

DHH keynote

I enjoyed the talk, he was passionate, direct and funny. I am also a believer in free and open speech, though there are topics that challenge this belief such as hateful on sexist/racist/homophophic. This talk was none of this but it did challenge the “common way of thinking”. I wonder if he opened too many fronts at the same time?

“The TDD experiment has failed, it just makes us all feel guilty, but tests are important but they do not have to come first”

I have to say I am happy when I see tests! They are not as common as we would like to think.  It makes it easier to understand, refactor and onboard new people. But DHH really was talking about the need to do it first and when done so could lead us down some architectural choices that are maybe to helpful for the overall plan. His analogy of guilt and diets in describing TDD was very good.

“We are software writers and only occasionally software engineers”

I like the analogy of being part software writer, it makes me consider more seriously the need to refactor your code.  When I write emails, I often get the main points together and then keep editing and deleting.  This comment made me reflect on not thinking of them as two separate “things”.  As someone at the beginning of their software career this was a helpful analogy as at this time I have written a lot more English than Ruby.

I also wonder if it makes access for women easier?  I read a good study – Breadth-Based Models of Women’s Underrepresentation in STEM Fields – An Integrative Commentary on Schmidt (2011) and Nye et al. (2012).

Relative strength of math and verbal abilities and interests drive science, technology, engineering, and math (STEM) career choices more than absolute math ability alone. Having one dominant aptitude (e.g., for mathematics) increases the likelihood of a strong self-concept in that domain and decreases the likelihood of equivocation about career choices in comparison with individuals with equivalent mathematical aptitude who have comparable strength in non-math areas. Males are more likely than females to have an asymmetrical cognitive profile of higher aptitude in math relative to verbal domains. Together, these two points suggest that the academic and career pursuits of high math ability males may be attributable to their narrower options among STEM fields, whereas females’ more symmetrical cognitive profile means their math and verbal interests compete in the formation of their ability self-concept and, hence, in their broader career choices.

My take away is we are in a competition, with other careers to encourage women to join us in software development.  If we are open to new ways to think about ourselves, this may or may not help.  Just a thought..

I wonder if this (the wider use of titles) is a good way to introduce different types of software builders into our community?  After all with all these bootcamps, new types of people will join our ecology, what will they have to teach us and how do we support them?

I think we need different type of software builders on the team and having at least one computer engineer/scientist is an essential  foundation. I should declare my undergrad was Computer Science. In my experience with teams, diversity is generally a good thing. Some of the best developers I have met do not have a background in Comp Sci degree, but instead have a Music degree. I also find teams with a mix in sex and culture are able to solve the bigger problems faster.

The better the readability/eloquence of our codebase will make on-boarding far easier for junior and senior alike. And if there are tests too, on-boarding becomes even easier!  We need the artists and the scientists. After all the ruby/rails community will have to include a lot more people to have a healthly ecology.

Simplifying Code: Monster to Elegant in N<5 steps by Tute Costa (@tutec)

This was a good workshop and started really well, working through five of the refactor patters.  I pair coded with my scholar. This was fun to help her understand more fully each of the steps. And in teaching you learn better ways to explain abstract concepts..

 http://www.slideshare.net/tutec/simplifying-code-monster-to-elegant-in-n-5-steps

Lunch

The hotel is right on the river/canal it was good to get some fresh air. I learned that Chicago dyes its water in the canals to get the green colour.

Ruby Coding Dojo by Carlos Souza and David Rogers

Here I stole a hour of this workshop (workshops covered the time of several sessions) before I headed for the next session which I wanted to see. The thesis was that practice was essential for software builders, just like it is for sports people and musicians.  That they spend more time practicing then actually doing.  They use the Dojo as a way to practice their code. Not too different from Ruby Koans idea, but they showed it as pair programming.  I like it 🙂

Concerns, Decorators, Presenters, Service Objects, Helpers, Help Me Decide! by Justin Gordon (@railsonmaui)

I think he needed more time for this talk, this would have been a good workshop.  He gave a scenario and then a solution.  This was very helpful.  His notes are comprehensive and he has included all of his slides with a repro and a branch for each example.

https://github.com/justin808/fat-code-refactoring-techniques

Mutation Testing with Mutant by Erik Michaels-Ober (@sferik)

A good and clear talk. About the use of Mutant Gem which tests your tests

https://github.com/mbj/mutant

Keynote – Farrah Bostic

This was a funny talk about some of things we may have forgotten after a couple years as a developer. She believes that a customer-centric approach is essential to designing innovative products and services. I am paraphrasing some of her thoughts:

Professional obey the laws and amateurs break them

Be nice to one another, take the time to explain to other non-developers. Stay inclusive welcome people to your community. Do not become like the Java or PHP community.

Are we approaching a code inequality, where it is good for you to be a senior and me a novice? Is it a goal for me to keep you in a position as a novice

Structure inequality is a bad thing for our society. Inequality creates fear.

Technology is in a magical place.  But are we talking about good magic or the dark arts? Or people who will be tolerate of us muggles and be nice to us and not scare the hell out of us and this “evil” technology. The question I have for you is whose side are you on? The Dark or the Light?

Your opportunity is to become customer centric coders.

Keep the good intentions and match with good behaviour, this is what attracted me to the rails/ruby community

No empty read me docs

If community/team matters to you will be surprised by this talk http://www.justin.tv/confreaks/b/522183251

Dinner discussions

As often happens a random group of hungry people got together at the end of the day to eat. Our group was a mix of sex, companies and levels.  A number of the scholars(novices) asked why are there no junior roles advertised.  Comments included:

  • One senior asserted that he felt other seniors were scared of loosing their “prize” position of being able to claim high wages and move jobs easily if they wanted to.
  • Another felt Seniors are lazy and do not want to take on extra “human” work load, of coaching a junior.

It started a passionate debate which was good to hear. We talked about GitHub and is it sexist?  We of course we talked about DHHs talk.

Day two – Wednesday

Yolks 2

Yehuda Katz keynote

Why we abstract and reduce complexity

  • We are not unique, we want the same things, we tackle the same problems
  • Software development is not a science
  • Laws are not good things
  • We build on abstractions and makes us better
  • Shared solution, we build progresss
  • It’s all about managing complexity
  • These tools allow you avoid complexity
  • Start at level 23 rather then 6
  • Area of experimentation (new levels) are where the debates are had and then it will become part of shared solution
  • The higher stack the less complex work
  • Rails has succeeded in building our stack out, it has reduced the complexity, it allows us to concentrate on the business

Deploying Rails is easier than it looks by Ben Dixon (@TalkingQuickly)

This was a good introduction to deployment of a Rails stack to a VPS.  Ben has a book Reliably Deploying Rails Applications

His stack was:

  • NGinx – web server
  • Unicorn – app server – zero time downtime
  • PostgreSQL – database
  • monit – monitoring – its tiny
  • chef solo + knife(Server Provisioning)
  • capistrano 3(Deployment Automation) rake app

Reading Code Good by Saron Yitbarek (@saronyitbarek)

Form a reading club to regularly read ruby code.  Her presentation had great visuals and also a way to spend up your learning of Ruby.  Whilst her talk was aimed at novices and juniors.  “Book Clubs” are a very good way to explore management/leadership and frankly any topic.

Panel Discussion: The Future of Rails Jobs by Obie Fernandez and Panel

A couple statements from the panel:

  • Employees are more interested in the team, and product over money
  • If you are junior apply to any level of post, smart people match on personality and the ability to learn
  • Average pay for intermediate 80,000 to 90,000 US
  • Fear of too many bad skill levels due to boot camps

Tricks that Rails didn’t tell you about by Carlos Antonio da Silva

I did not go but heard good things

https://speakerdeck.com/carlosantoniodasilva/tricks-that-rails-didnt-tell-you-about-at-railsconf-2014

How to be a Better Junior Developer by Katherine Wu (@kwugirl)

This had some interesting perspectives about the approach you should take with the rest of the team. How to use your skills as a non developer to support the developer team.  But stay on target to become a developer.

Panel: Teaching the Next Great Developers by Noel Rappin

This looked at different perspectives of how we are currently educating the next generation of rails/ruby developers i.e. bootcamps.  It covered the lack of developers.

If supply does not meet demand, demand will go elsewhere.

This comment stuck me with and a couple stories were told about funded Startups unable to recruit rails developers choosing different stacks to build their “stuff”.  I have encountered this personally as Rails developers are too hard to find, a few companies have asked me would I consider learning Node.js.  I will have to explore this further. Jeff Casimir @j3 had some great comments:

If someone asks you to code on a whiteboard, ask them how to do I run tests?

If your company does not spend time bringing in junior/apprentice devs they are going to lose.

After there was much conversation of the Bootcamp phenomenon.  A good number of the Scholars for this years conference had come from Bootcamps some with lengths of 2 months others 3 months.  There were a good number of strong opinions of this phenomenon, I share a few of these here:

  • Some feel that bootcamps are producing a “novice” level of software developers, not yet junior
  • That some feel that these bootcamps reduce the quality of the rails community
  • That the bootcamps with a certain apprenticeship of least 3 months are the best
  • That some exaggerate their “employment” opportunities/success and it should be measured if the boot camper is still in their job 3, 6 and 12 months later.
  • That some bootcamps are filling up all the “junior” spots in companies leaving non-bootcamps juniors grasping for straws.
  • Some companies are cycling through 3 month apprenticeships
  • Some felt they could reduce the pay offings as they “flood” the market.
  • That the quality of bootcampers is very mixed
  • That bootcamps are bringing more women to our ecology
  • That with the standard tech interview most bootcampers fail due to lack of understanding of Algorithms, Data structures and use of Ruby.
  • That we build frameworks, to handle complexity, Rails should bring people in who should not need to be a computer scientist.
  • That they exist because the education institutes do not teach Rails/Rails, leaving the only option to learn with others being bootcamps.  With startups and business driving the demand for rails as a fast prototype framework.
  • Some felt it was a good thing and whilst painful for the community, we will evolve/adapt and it will help the community step up in numbers and mature.

Evening

Chicago Diner – Great vegan food.  No I am not a vegan, but this was the best meal I had this week. You should go!  Then we hunted down an Ice cream shop, Margies felt like going back to 1921, BIG helpings

Margies

Evening discussions

We talked about our journeys to rails this was interesting most had come from a different background i.e. not computer science. From the people I met at the conference about 50% were actually from a Comp Sci background (A good chuck had also dropped out).  Most told me one of the strongest reasons they choose Rails/Ruby was the community and how helpful they were.  The journey seemed to be Rails and then fall in love with Ruby.  We also talked about our worst tech interviews, wow I thought I had some interesting experiences.

Day Three – Thursday

Comedy in software – Baratunde Thurston (@baratunde)

Without a doubt the most humorous keynote and the message was do not make boring software, find ways to be unique and humorous with it. Use your error messages in a fun way. If you need a bunch of good laughs you should watch this keynote

Cultivatedwit.com

All the Little Things by Sandi Metz (@sandimetz)

Without a doubt the best talk at the conference.  Essentially she took a long IF/ELSE monster and converted it from procedure to real object oriented code.

  • Small methods are good
  • Refactor large if statements into case with methods
  • Tolerate duplication until you find the right abstraction
  • Squit test – look for bends and see types are near each other
  • Are you going to write procedures or trust objects?
  • Inheritance is good when it is, shallow and narrow and for leaf nodes
  • case is for business logic, not choosing classes.

I need to read Sandi Metzs’ book she is also currently writing a Rails book, here is the keep me informed email page.

Pair programming with my scholar

She had a blog setup but could not get her CSS to work and was confused about the different stylesheets what they met and when to use them. And what are all these extra extensions are e.g. erg and scss. And she wanted to get bootstrap up and running. We covered

  • Assert pipeline
  • File name extensions
  • What is sass and setup up some variables for her colours
  • Quotes the difference between ‘ and “
  • Bootstrap
  • First bootstrap button

Let the drinking begin

Happy hour in the exhibit hall, this was good but lacking due to no seating.  Which just encouraged us to go to Code climate drinks 🙂

Caipirinha

Day Four – friday

Taming Chaotic Specs: RSpec Design Patterns by Adam Cuppy (@codingzeal)

Frank this was an awesome workshop.  I learned a couple really good things from it.  A really backed room.

  • Pattern 1: start from minimal valid object (test to true)
  • Pattern 2: control values with ‘let()’
  • Pattern 3: Permutations using ‘context’
  • Pattern 4: Descriptive naming
  • Pattern 5: Extracting common behaviours

Pattern five was a real eye opener 🙂

https://github.com/CodingZeal/skinny

Tales from the Crypt by Aaron Bedra, Justin Collins, and Matt Konda (@abedra @mkonda @presidentbeef)

This was sketch where the team walked through a bunch of security issues. I think I have to watch this one again on the video and take notes this time.

Cognitive Shortcuts: Models, Visualizations, Metaphors, and Other Lies by Sam Livingston-Gray(@geeksam)

http://www.cs.colorado.edu/~ralex/papers/PDF/OOPSLA06antiobjects.pdf

This was a beautiful talk.

Key note – Aaron Patterson (@tenderlove)

A homourous round off by Aaron, with some balance to DHHs’ talk. You need to watch both DHHs’ tale and Aarons’ to fully enjoy. His thrust was in part that we need science in our community. Concluding with his 3 years of work on Adequate Record essentially speeding up, by 3 times certain ActiveRecord queries. His last act was him merging/pushing his amazing work.

Conference Reflections

The conference was well run and organized. There was some great speakers, great debate and lots of awesome people. Thank you smile

  1. First day novice track– There should have a newbies/novices track i.e. next steps for boot campers on the first day.  Maybe with the 10 things from computer science you need to know, or how to use Active Record, or The 10 differences between a junior developer and intermediate, how to survive tech interviews.
  2. Get the community informed earlier – Maybe next year the rails conf team could state that they are interested in building a couple tracks and ask what “we” think should be in the track. Lets move the conference from waterfall to customer centric Agile 😉
  3. Find out what we(the community) needs – Have a way to vote on topics, and then advertise them and take offers.  I think that either the way the rails conf team should get to decide, rather than a popularity vote, but new ways of engaging people in what topics and what workshops, I think would produce some interesting results.
  4. Level Tags – Hacking rails was delivered as a junior session.  Maybe it would be worth considering adding tags to each session stating the levels that will be covered. The Novices track without a doubt had greater percentage of woman in it.
  5. Keeping our community “good” – Maybe we should have a community track next year, if this is one of assets how can we keep it, evolve it and stay welcoming.
  6. Humour – It was really smart to have the humorous keynote on day three today, it gave me energy.  I am also going to build a resume, to help me find people I want to work with based on their humour.
  7. Food – The food, it was well, meh, with the exception of the last day. For snacks please consider nuts and fruit, less of the sugar crash afters.
  8. Space – Some of the smaller rooms, felt very packed and lacking of air.
  9. Jobs – A bigger jobs board and maybe one for people looking for jobs.

T – Shirts Competition

For those who have not being to railsconf, most of the companies in the exhibit hall stands have free t-shirts to give away.  They always run out of XL so there is a rush (unlike the gold rush). These are the T-shirts I would wear after railsconf.  I like them because the material is soft on my skin and the logo/text/pattern is interesting to non-developers and developers alike.  Those just with their company name are a FAIL.  I don’t mind advertising your company if it is comfortable and smart. New Relic = Datalution, Rackspace = Keep calm and code on, Sales Force = Achieve and of course railsconf 🙂

IMG_1628

A weekend in Chicago

I stayed in a hostel (The Chicago Getaway Hostel), great place has a lot of events.  The first night I went on the pub crawl and met three other railsconf attendees who I had not met before. The next day I slept and coded and then onto another pub crawl and met still more railsconf attendees 🙂 Had a great Chicago pizza at Chicago Pizza and Oven Grinder Co

Chicago Pizza

Other resources for Railsconf 2014

The job market

The ruby job market

The job board

rails2014 - job board 1railsconf2014 - jobboard 2railsocnf2014 - jobboard 3

Visual overview of Ruby on Rails


rails_breakdown_v4.1

Please give feedback

Version 0.1 – credit Brooke and Eric

Version 0.2 – Made full size, made core library labels bigger, bold text and strengthened lines – credit Andrius and Trevor

Version 0.3 – Make it clearer , between the different core libraries – credit Chuck

Version 0.4 – Get the capitalization right for Classes and Modules – credit BLITZCRUNK123 (Reddit). Have also added more and defined the difference between capabilities and Class/modules.

Version 0.4.1 Make it clear what the version is for- credit _jeffJohnsonsBookEmp  (Reddit)

Becoming a junior rails developer

So I looked for a tech cofounder and infact found almost three. Then a friend who was a developer said they would be happy to “play” and see what comes of it, if we paired (pair programming) as it would be fun, and if he was going to use his non-work time he wanted it to be fun. I agreed this was a better approach, building alone is hard (Thanks Phil)

A bit of context

My father was a computer engineer i.e. he fixed mainframes for Digital, DEC and than Apple II upwards.  My first computer i.e. my dads was Sinclair ZX81 it had 1k of memory and used a tape cassette for storage. I learnt BASIC.  My second computer (this time mine!) was a BBC Micro 32k of RAM. My first serious application was again written in a different form of BASIC and allowed you to paint and draw. My childhood was very unstable and I went to a number of foster homes and many schools (I was little too curious). Anyways eventually I got to college (16 yrs old) and did a (BTEC) Diploma in Computer Science.  

It felt too easy for me and I was more curious about humans so dropped the course (even though I was one of the top performers) and took a bunch of A Levels in Psychology, Sociology, Communications and Human Biology.  At this point I learnt , I was a really bad at written english (it took several years before I found out I was dyslexic). I dropped the courses and went to Northern Ireland for a year or so.  I came back and tried again in one year intensive courses. Someone close to me died and I screwed up my exams.

I got enough to get into the Higher National Diploma for Computer Science at the University of Hertfordshire, UK.  In the first year I was in the top 10% of my class and got moved up to a Degree program and graduated in 1996. And than than did not code again until 2013.

Becoming a coder, again..

Phil’ comment set me off in a two year journey to become a developer. I took two evening classes a week (about 20 hours a week) and over two years worked seven days a week. In all I did 13 courses (including HTML, CSS, JavaScript, AJAX, XML, SQL, MySQL, PHP, JAVA and System Design).  I started with an intense HTML course and worked my way through the whole stack from front end to back end.

[update] in hindsight these courses gave me confidence, but did not relate to the reality of what it is like to be a developer in a full-time job.

a few of my coding books

a few of my coding books

Rails..

I wanted to learn Ruby and Rails, all along because  I want to build prototypes for my startup (Professional You). Yet there were no local courses. I prefer learning with others, its good to have a peer group. So in Jan 2013, I booked myself on RailsConf 2013 and gave myself a deadline to read and complete Learn Web Development with Rails prior to the conference. I was introduced to a start-up (Thanks Jessie) and started working with them two days a week as a junior rails dev.  I learned a couple things about myself,  I was not good at asking questions from the lead software developer as I was worried about taking them away from their tasks (as they were under a lot of pressure from their boss) and we worked remotely, which is not ideal for a junior. I also found testing before coding was very difficult, in part because thought I needed to know rails better first.  Additional good Rails book that helped in my journey were  Rails 4 in action  Rails Anti patternsPeepcodes Videos on RSpec and rails casts.  railscast are brilliant for an immediate problem to solve but is very out of date, Code School as a selection of rails videos as does GoRails. That said I do not find that anything I learn online or via video sticks, I seem to forget it quickly..

If I was to do it again:

  1. Learn Web Development with Rails there is just no better
  2. Build several Web Apps for yourself e.g. store all your boardgames/books, role up characters for RPG, whatever feeds into your hobbies and use rails casts to add features
  3. Read Rails Anti patterns

Ruby

It becomes clear that Rails does so much and its BIG, but the better your Ruby knowledge, the easier working with Rails, no shit. There are times you have to build your own model without Active Record and connect to APIs.  Everything becomes a little easier, your code gets tighter.

I tried the Well Grounded Rubyist book, whilst I understood all the concepts it was too much without having not built Ruby Apps first. Most of the online Ruby course were interesting such as Code Academy, but they failed to stick in my head, one exception was a course on Lynda called Ruby Essentials, which frankly was brilliant (Teaches the basics and the gets you to apply them in a Ruby App). After that I tried the Ruby Koans. The hard part about coding is trying to remember it all, understanding I think is easy but holding it all in your head is hard.  One senior developer said to me you do not need to remember everything just remember you can, then Google it. The more times you use it the easier it will be to remember. His other tip was to store all of his projects on Google Drive, so he could use it has augmented memory.

Training that actual gets you to build an application, I found to be more useful and gave me extra value, rather then little bits of code. Looking at how other developers tackle the same problem is also incredibly useful.  Peepcode did a bunch of Play by Play videos, which taught me a lot about how they solved the problem and I also learnt how to use different tools.

The other thing you should do is work out how to connect to your local community:

  1. Ruby Rogues podcast is awesome and their discussion site is worth the $10 per year
  2. Find the local Ruby meetup group
  3. Find a peer/mentor who will review your non work code

If I was to start again:

  1. The best beginner book for Ruby was The Book of Ruby: A Hands-On Guide for the Adventurous
  2. Add RubyTapas videocasts
  3. Then follow up with the Well Grounded Rubyist book
  4. Read Metaprogramming Ruby 2

Learning about software engineering/development..

There are a bunch of tools and “behaviours” (ways of working) that you have to learn, some of this comes from you just coding, but some you need to spend a bit of time working on i.e. Git (or other version control)

  • BASH – Re-learning Unix i.e. Terminal on the Mac, SSH
  • Text Editors – Trying out different text editors, BBEDIT, RubyMine, Sublime and finally Atom
  • Version Control – Getting comfortable with version handling i.e Git, how to use GitHub, decided to use command line to embed it in my head
  • Package Management – so home-brew is better than Mac Ports
  • Debugging – Where to find the bugs for debugging, using irb, rails console, understanding the logs and the stack trace
  • Object Orientation learn and understand all the meta language. I have yet to find a good book on this.
  • Data Structures – I am comfortable with, but I have yet to find a good learning option for this
  • Algorithms – The best option I found was Grokking Algorithms
  • Where to find the information that will help i.e. online manual, google, stack overflow, google groups
  • How to tackle the actual problem, when to step away and take a moment
  • Where to ask a senior and not annoy them (still working on this one)

Ready?

You are never ready, its just a matter of choosing the time, finding the courage to be vulnerable and going for it.

Its seems surprising that some of the best times in my life are when its has gone so wrong, you really discover the other people around you in that moment the good and bad.  You could wait to be that perfection and never make a move. I knew that two days a week of coding after working the other five was tiring me out, but I also knew I liked to code, I love problem solving.  That said I had yet to build my GitHub profile, most of my work was private, most of my student work was very specific, so not a complete web application but do this on this page. Whatever, It was time to go full-time. Lets see what happens..

Advertising myself..

The best way to get what you want is to simply ask

Just before christmas 2013, I sent out an email to the Ruby meetup group in Vancouver, BC. The discussion space often has recruiters looking for rails developers, why not flip this and advertise me!  I did not expect much of a response..

—–

Subject: Looking for a Junior Ruby on Rails job

Hello 🙂

I hope you are having a great day and not too bored..

I have computer science degree and most of an MBA. I have played and succeeded in many other careers like communications and being a politician. And I have learnt that I love to create. So I went back to school (BCIT) to refresh my computer skills and learn web applications, after two years I have done a bunch of evening courses with an average grade of 93%. For the last 6 months I have being learning/coding Rails/Ruby on my weekends for a local startup. I have also attended a bunch of Rails/Ruby conferences in the US on my own dime.

Full-time I have being working for Apple as a Genius/IST Support. I know crazy right working 7 days a week for two years.. I am now looking for a full-time software development role with an emphasis on Rails.

You will find all the good stuff in my linkedin profile -> ca.linkedin.com/in/ericbrooke/

Continue having a great day 🙂

Eric
—-

In all I got 80 responses, over a four week period (40 within 48 hours). There were 42 real jobs going, 20 were long term contract, 8 short term contract. 10 were you are the first developer, no not good, go employ a intermediate or senior developer! Leaving me with just 17 companies to talk to, after researching each of the companies, I spoke/emailed to them and then did 14 actual interviews. After which I cut it down to five after second interviews I cut it down to two..

Finding the right team to join..

You are the apprentice and you are looking for master/mentor/teacher/coach/facilitor not a boss, not the brilliant programmer whose ego is big enough for you both.

A couple principles for me:

  1. Those that asked for me to do code test prior to having a first human to human conversation, I did not continue.. I am not your code bitch.. or your slave, talk to the human in me first
  2. How much they truly bothered to explain who they are as a company and their intended culture, mattered to me.
  3. You need patient senior developers who are willing to coach and that their bosses will give them the time/leeway to coach
  4. That you will learn a lot from developers who have different styles and roots, prefer different languages and frameworks
  5. I need to grow and learn fast, how are you going to help me get to intermediate?
  6. Seniors that have being teachers or parents tend to be better at explanation. Just a theory at the moment.

Interview

I want to work with awesome people.

Be they smart, emotional intelligent, creative or just different. The most laughter at work I have had are with teams of such diversity, with so many forms of intelligence, not just the academic kind. I am going to be spend a lot of time together, consider it a road trip, we will get angry, sad and laugh together. The culture, the people that I work with is important to us all. For these people I will have lasting loyalty, forgive and move on, push the boundaries to ensure there is a future and learn every fricking thing I need to learn, take time out of the rest of my life to make my colleagues life easier. So if you send me a coding test before, we know, we like each you can frankly go @@@@ yourself.

A good interview is a collaboration of us exploring each other.

[updated] Questions to ask –

  1. Have you ever had any juniors before?
  2. How do you review code?
  3. What is your test Coverage? What are you not testing?
  4. Do you have Introspectives? What do you do to help developers learn?
  5. Do you use pull requests?How do you use them?
  6. Do you state why the code is wrong in the pull requests?
  7. How will help me growth fast, so I am no longer a junior?
  8. Is there flexibility on which projects/teams I work?

Technical tests

Understanding your capability is hard and is often judged on so many irrelevant things

There are few jobs where you are ask prove you can actually do the job before you actually do it. Some tech interviews felt like you were expected to put out on the first date.

The best I had were conversations and tested practical experience, not theoretical mathematics. The actually best asked we to describe what I know and then sat me down at a computer asked me my favourite coding tool loaded up an example application. They asked where would I find a routes file, explain these routes, where do they take me, asked me to follow the whole path what was load etc. After if I want to add this to the app what would you do? “feel free you access the internet”, explain what you are thinking? The sneaking bastards even had a couple “bad” things in the code to see if I would notice. So I did not mention them until I was about to leave 😉 That was my first job offer

The worst started with theoretic problems to write pseudo code on the board… Funnily enough they started questioning my pseudo code. Some people see an interview as a way to prove their intellect not understand yours.. Have you forget who is interviewing here, you, er no both of us.

For people who did their computer science degree a long time ago or learnt on your own path; I recommend this book Think like a Programmer by V. Anton Spraul.  The most stupid, abstract, non-relevant questions I have every being asked in any interview were all in technical interviews. And folks I was an elected politician.

Testing the “interviewers”

I have learnt more from people, when I have failed or needed help.

So every job interview I find something to fail at and see how the interviewer copes. I will also ask my interviewers how they will cope with my failure and how they cope with theirs.  I will always ask at the end of the interview what do you like and not like about me.  I learn so much from their response.

The type of organization to work for..

If I am going to work on something, I need to care..

Go for an one domain company, startup or for an agency style..

Domain companies tend to give you a position and you have to earn your right to grow, the structure tends to be more rigid, yep be a junior for three years. You get small parts of a big cog. But you would learn about scale to a higher degree. And maybe they may have systems/coaching/mentors/learning plans in place to accelerate growth of juniors. That would make sense would it not?! not one on my list.

Startup, happy to take the risk but you have to love it and I did not love any of the startup offers. Also they tend to lack the numbers of senior developers you can learn from.

I went agency i.e. build prototypes, because I wanted to work on a lot of different products in different domains, I felt I would learn more faster, and so far that is true comparing my growth to my friends. With prototypes you have to do the beginning a lot and then you finish, and then you do it again, there is opportunities to grow in each project.

The job I took

It felt like a conversation between curious people.

It started on the phone, progressed to face 2 face and then there was a take-home coding test. They were good questions that I had to think about. The whole process felt open, unstressful, they trusted me and I trusted them.

I asked my boss what does he look for?

“People with a wide life experience who can clearly show they can learn”

So far it is pretty awesome I get to work with three seniors who have different approaches and the diversity is already teaching me a lot.

Updated

So after two and half months I got laid off.  They removed the Junior developer position (it affected two positions), and I was the least experienced, through out the company).  Two weeks later 11 more people got laid off, then another bunch a couple weeks later.

It was also reminder whilst you can test the people you get to work with.  But their bosses can(may have to) change their mind (and in fairness it may be outside of their control).  So in future I will look at the leadership and their track records.

I would still make the same choices, and worked there.  I learned an incredible amount and worked on 4 projects.

All of that said, I ended up in another startup mybesthelper where my first job was to get our tests over 85% and upgrade their Web App to Rails 4.1, fun 🙂

Building an open source program for technology co-founders

In February I wrote a blog post about the lack of support for technology co-founders in BC, Canada.

I have decided to pull together an open source program/set of courses to educate/grow/upgrade technology cofounders, to increase their chances of success in their role.  The first step will be to collect ideas/experience/wisdom from the community and then pull it into a bunch of classes that a person can work through at their own pace.  It is my intention to build it so anyone could actually run it as face to face classes, in their local area.

How can we help each other to avoid mistakes that others have suffered?

How can we help each other to avoid mistakes that others have suffered?

The idea.

Create an open source resource/courses/program that people can run in their local area to educate/grow/upgrade technology cofounders, to increase their chances of success in their role as a technology cofounder and grow into a full CTO role.

The Why.

There are many, many programs that support the business/leader/ceo co-founder but few I know to support technology co-founders.

Motivation.

To help technology co-founders avoid mistakes, learn from others experience and build the quality product

Target audience Technology co-founder of a startup (Startup levels) with the intention of building a fast prototype to prove the concept.

Boundaries

To stay platform/technology agnostic

Journey

I will start with a level one startup and build through the others

Please share this link and come and contribute to the program at https://github.com/ericbrooke/ctofounder/wiki this is a wiki in which will collect all the ideas, suggestions for people we should interview, good resources you have already found and learned from..

We need the views of:

  • developers,
  • those thinking about creating their own startup,
  • those who are in it creating their first production,
  • those who have supported technologists on their journey,
  • those who have done it several times.

We don’t care if you have succeeded or failed share it!  We need all your questions and experiences 🙂

We all strive to be artists..