While I won’t be at WWDC proper I will be in San Francisco the week of WWDC. I have a ticket to AltConf and otherwise expect to be mingling about.
What do I want to see announced? Here is some of my wish list.
- Let me use Xcode’s refactor tool to refactor Swift.
- Let me use Instruments to measure performance of Swift.
- Introduce a tool similar to
- Add standard library tools for processing JSON.
- Continue to improve Obj-C Interoperability.
- Swift versions of NSDate and NSDecimalNumber
- Fix the “I have to make it public or double add the modules” to let tests see code issue.
- Introduce a cloud service version of Xcode Server.
- Improve Xcode Templates (eg: should recommend new test file with new class).
- Add code coverage tools.
- Improve testing tools. (Maybe add a formal UI testing layer?)
- Add a spell checker that is smart about function names and other symbols.
- Stability improvements.
- Let me slide loads apps outside the App Store.
- Improve App Store searching, browsing and discovery.
- Formal API to iTunes Connect.
- Third Party Siri access.
We’ve been trying to a better job of capturing our main talks at Philly CocoaHeads. You can find and subscribe to our small but growing collection of videos on Vimeo: https://vimeo.com/phillycocoa.
I did a talk last month reviewing a some iOS code patterns. The runtime is about 27 minutes. Feedback very welcome.
Some Code Patterns, Mike Zornek from Philly CocoaHeads on Vimeo.
This talk covers a handful of code patterns that were successful on my recent projects. Some of these patterns include Block Safety, "Tell, Don't Ask", Using DataSources for your network-based *Service objects.
Apologies the audience participation isn't well captured.
Cue the Journey song, Edge Cases is ending.
Edge Cases was a podcast hosted by long time Apple developers Andrew Pontious and Wolf Rentzsch. Surprising unlike many other podcasts hosted by Apple developers, Edge Cases actually embraced the code, doing weekly non-topical coverage of coding concepts, practices and history. The show ends after 128 episodes and will be missed.
I’ve been following Wolf since the MacHack days and Andrew since the blogging boom of the early 2000s. Both are incredibly insightful and genuine. I want to thank them for putting on such a great show. The dedication it takes to run a regularly published podcast is no small feat and it was appreciated. I wish them well with their future projects.
If you haven’t listened to the Edge Cases show before I encourage you to browse the archives and give it a try. The content is timeless.
I guess I could have use a more sophisticated reference in the title like Know Thyself but I can’t help quoting the most electrifying man in sports entertainment, The Rock.
Know Your Role!
When trying to breakdown the relationship with your clients and to help define expectations you need to define your role. One high level way to do this is to decide if you are a contractor or a consultant.
A contractor is someone who comes on to a job site to execute. They are given all the specifications they need. They act in a professional manner. They produce.
A consultant may produce as well but their primary responsibility is help design the solution. They work with the client to understand, identify and document the problems and the pains. Then through their lens of their experience in the industry propose a solution. Usually they stick around to help build that solution.
If the client looks to you for help to build the product right, you are probably a contractor. If the client looks to you for help to build the right product, you are probably a consultant.
Personally, I consider myself a consultant. I love designing the solutions and while I can code, and continually strive to improve my craft, coding by itself is not truly fulfilling.
It’s been challenging over the last few years since leaving independent life and working for larger companies. These days I don’t have a lot of involvement in the sales process so by the time I’m working a project expectations are already set and a fair amount of time it feels like we are hired as contractors, which I have nothing against, but if I’m going to be a code mercenary you need to be really good about those specifications and more times than not, they fall short. They explain only the happy paths or they misuse platform norms at the cost of more engineering and two steps back in user experience.
I suspect this phenomena is not an isolated problem but discussion about that will have to wait for a future post.
I’m working on a client project right now. We do peer review of the code via pull requests. It works great, but the quality of the reviews you get are very dependent on the size of the pull request you make.
Take for example, one of my recent pull requests, which had the following git characteristics:
24 files changed
Not my largest pull request ever but still way larger than what I’d prefer. I got zero feedback. It was merged on first pass. Now take one I did the next day:
7 files changed
We had 10 conversation posts on this pull request, discussing three distinct recommendations and/or questions. Questions on things I was already doing for a few pull requests already but I guess slipped by.
I don’t blame the reviewer, I blame myself. It’s really hard to be detail focused when there is so much to review.
So keep those pull requests small and focused. You’ll get better feedback and you’ll probably get integrated faster too!
I’m not sure if “Selling Design” is the real title for the Keynote at Interaction15 (1h5m) but that’s the topic your are going to see. Mike Monteiro a does a great job reviewing some of the pitfalls creative people run into when working with and presenting their work to clients and all the delicacies of those relationships. For those doing contract work, a must see.
You might also like Mike’s talk: Fuck You, Pay Me or his books, Design is a Job and You’re My Favorite Client.
Contracting and project management are topics that regularly come up at my job, Philly CocoaHeads and IndyHall so I’m going to try to do better about writing about those issues here. In the mean time, I highly recommend Mike’s work to get your own brain turning.
I’m not one to do a ton of online product reviews but after CocoaLove I was asked to do one for the walking tour we took on Sunday. The site was TripAdvisor and from what I hear having good reviews there is really important for companies so I figured I’d share the love.
Since posting the review I’d say I get an email from TripAdvisor every 3 months or so. The email helps explain how much of an impact my review has made.
I really like the email.
I suspect emails like this help encourage further user contributions. If your website or service captures user generated content I’d encourage you to experiment with similar behaviors.
Swift and Cocoa are like The Odd Couple. Two people, with drastically different personalities who are joined by fate to live with each other.
The Odd Couple Theme Song
One prefers things very explicit and will check and double check things are in order before starting a task. The other is happy letting things happen haphazardly, as things flow; the details can be worked out later.
One would only ever allow a single item type like socks in his drawer. The other is happy to store a mix of things in his.
One is very cautious with things handed to it, slowly unwrapping them. The other is extremely trusting and uses stuff passed to it without question, result be dammed.
I haven’t had an active side project in the last few months. When asked I would tell people looking for a new job was my side project. Now that I have that new job search (and my Girl Develop It class behind me it’s time to kick something off; we’re going to rebuild the Philly CocoaHeads website!
When I took over the local chapter of CocoaHeads here in Philly (back in 2010 or so) the previous organizer had a Ruby/Markdown publish system setup. It was kind of neat but involved a lot of setup on the client box to get up and running. I had a few people posting to the site so rather than set up that system on each individual’s box I opted for WordPress. The WordPress site has done ok for us but we’ve been growing a ton and doing a lot more over the last year (workshops, video capture of meeting presentations). I’d love to start to centralize things like keeping track of our members and our money, overall there is a ton that could be automated and it’s time to make it happen.
I don’t want to do this alone and I also would love to start documenting the project as it unfolds. To get started we have a brainstorm session scheduled during Side Project Saturday. If you want to participate please consider stopping by. If you can’t stop by, but want to participate, let me know and maybe we can setup a Google Hangout call-in option. To capture notes I’m going to use Trello. The board is live and open to the public. (You will need to login with a Trello account to edit.) Feel free to start to document your ideas today.
While looking for a new job last year I slowly built a list of questions I would ask the various companies to help better understand if they were a good fit for me. Some of these questions are ripped from other blog posts, like The Joel Test, but many of them were from personal brainstorming and soul searching about what I wanted.
Hopefully this list helps those out there looking for something new.
- Pretend I know nothing about the company, how do you describe it?
- Who owns the company? What are their interests?
- How would you describe the company culture?
- What are its core values?
- How is this evident in everyday action?
- There is a great TED talk by Simon Sinek that has a simple but powerful model for inspirational leadership all starting with a golden circle and the question “Why?” He describes a circle with the word Why? in the center and then moving outward, How? and then What? — Simon explains that most people can answer the What, what do they do? — some fewer still can answer the How — but the truly successful can answer the Why? Why do they do it? Why does your company do what it does? Why does this company sell paper towels instead?
- What can I see / download as a public example of your work?
- Name something the company is struggling with and how you are trying to fix it?
- Name something the company excels at? What are the lessons to be learned?
- What’s going to change at this company over the next year? three years? five years?
- How does upper management communicate with the company at large?
- How are projects and/or teams organized?
- How do teams communicate?
- How do you plan and track work?
- How do you estimate?
- Do people work on multiple projects at the same time? If so, how is time broken up?
- What is the process like from napkin idea to deployed feature / service? Where am I in this process?
- Who decides what to work on?
- Who is the designer? Do they work closely with the development team? How much to they appreciate, expand on norms of the various platforms?
- Is there a standard process for the handing off assets, specs, motion simulations from the design team to the development team?
- Do you ever do retrospectives? If so when? end of the sprint? end of the project?
- Do you ever have internal projects? How do they work?
- How would you split up my weekly hours between different responsibilities?
- How is customer support handled?
- Do I have any interaction with the customers?
Process (Client-based work)
- If I’m working on a client project, what is my interaction with them?
- How does pricing work for client projects? How is development involved in coming up with these figures? What would my responsibility be in this?
- How do you run employee reviews?
- How do you gauge employee happiness?
- Are there any company events? travel?
- Would I be required to interview people?
- Do you have an official interview process?
- Do new candidates write code during their interview?
- How does overtime work? Are people compensated for overtime?
- How does vacation work?
- Are there sick days? Long term sick days?
- Can people work from home? Do they?
- Is there a 401K?
- Is there a health plan? Dental?
- Is there on-site parking? Do I have to pay for it?
- Is travel involved for this job?
- Do you have a company manual? Can I have a copy?
- Do you have an org chart? Can I have a copy?
- How is the development group organized?
- Who do I report to? Who reports to me (if any)?
- How transparent is the company with regard to it’s goals, it’s plans, it’s money?
- How do you make sure the staff is continually learning?
- Do people get a dedicated budget for things like attending conferences, purchasing books?
- Do you allow people to travel to speak at conference during company time?
- How do you track staff technical skills? Current abilities, wanted improvements?
- Do you have an official mentoring system?
- Do you use the best tools money can buy?
- Do you have testers?
- Do you do hallway usability testing?
- Do you use source control?
- Can you make a build in one step?
- Do you make daily builds?
- Do you have a bug database?
- Do you fix bugs before writing new code?
- Do you have an up-to-date schedule?
- Do you have a spec?
- Do programmers have quiet working conditions?
- Do you do code review?
- Do you do pair programming?
- Can I have a tour of an active project’s code base?
- How many developers are there?
- What is the proficiency ratio between senior level / mid level / junior level developers in the company?
- Do you let people jump around from stack to stack or do most people stay focused on their specialty?
End of list. Best of luck with your job hunt!