Frequently asked questions about my experience.


Question: Protocol design. Have they needed to design a protocol even using JSON to communicate with a server/service.


Answer: I work with an in house memory streaming and messaging protocol to send data to all a array of devices. Although I did not own the protocol, I participated in the design and implementation and of about quarter of the protocol's messages.


        • The Channel Activity message was updated to include all endpoints on the channel when the user first logs in.
        • While working on WAVE I had the opportunity to implement all the messages for peer to peer calls on the Android and iOS clients.

Question: Describe how they have optimization memory, network bandwidth or disk space on a product.

Answer: I optimize memory on the iOS mobile client by making sure I keep up on my analyzer warnings in xCode. Click here for a look at the tool. I do that by running them on every check-in to master and displaying it on a bigscreen in our office. The Hue lights also go blue when we have analyzer warnings.


Question: What multithreaded apps have you developed?

Answer: The WAVE Mobile Communicator is our current app and it is multithreaded. Much of the code uses Objective C's Grand Central Dispatch which runs on multiple threads, but we do have two custom threads. One is for ping timeouts over the network, and the other is for the audio circular queue player.


Question: Have you done work related to synchronization of files, pictures, videos, email, calendar, contacts...

Answer: I developed an iPad text messaging app for At&t. It synchronized paginated text messages with an Objective C Core Data database.

    • I have also done some side projects involving synchronization of user high scores.

Question:What is the hardest problem you needed to debug.

Answer: It is hard to point to any single one since there are so many. I tend to gravitate towards the harder problems to solve, and pitch in my help. We had a hard time recently with working with Bots, but I think we had the right approach and mindset when we started. We knew that it would not be straight forward, and when we hit a wall we reacted with investigation without discouragement. If the desire of the question is to get to the answerer's weaknesses when it comes to debugging, in the past I have had problems debugging server and network problems. Luckily I had my brother asking me questions that I did not have answers for, which led me to search for their answers. I found that debugging servers are all about getting to log files. Usually some part of the system is spewing out printf "ERROR, hey Phil this element is not defined yet, stop playing ping-pong and learn how to error check your code properly!?"


Question: What's the advantage of batching commands over the wire?



      • able to optimize transfer of data without having to wait for individual responses.
      • Quicker uploads,
      • less network bandwidth
      • Clients device uses less cpu cycles that the server handles.



      • complicated error handling
      • hard to know which item failed
      • hard to how to recover/restart
      • More coding on the clients.
      • Server does more of the computing work.
      • Less code regulation on the protocol. The code could get out of hand. Less strict of the protocol.
      • I would also think that being able to run commands locally on the server from outside the terminal is a rather large security risk. If malicious bots gain access to this service, then they could do much greater harm with that type of power to work with. They could inject code that could copy out whole database for instance.

Question:Have you developed code using queuing systems like RabbitMQ

Answer: I have worked "around" ActiveMQ and used it in conjunction with Groovy Grails (Java). But I do not have any serious experience with a MQ system.



Question: How do you find bottlenecks, memory leaks and crashes in their systems; especially from production code where they cannot talk directly to the customer.

Answer: A healthy CI will often inform you when crashes occur, and even if the code is in production. I am a big fan a analytics and test flight crash reporting. My teams check these crash reports regularly, and often have enough information to crush the bug and cover it with tests to make sure the bug does not come back. I try to always reproduce the bug using automated tests. Most times an end-to-end test, but sometimes it can be re-produced with an integration test. When done that way, the reproduction is started with a mouse click, and the test written will ensure the bug never returns. That is assuming your CI runs your tests regularly and would inform the developer promptly on test fail.