Saturday, December 16, 2017

Git squash Notes

git rebase -i HEAD~3
git log --pretty=oneline -n 10

Change numbers to find where exactly we need to do HEAD~n
git rebase --abort
git push -f origin branch-name
gitk
gitx

vi commands
/pick
cw - change word
squash
n
.

https://robots.thoughtbot.com/git-interactive-rebase-squash-amend-rewriting-history

Sunday, November 26, 2017

Strip trailing whitespace on Save with …callbacks! in Textmate


Open the bundle editor (⌃⌥⌘B) and open “Text” → “Menu Actions” → “Converting / Stripping” → “Remove Trailing Spaces in Document / Selection”.
Then in the drawer put callback.document.export in Semantic Class and Document / Replace Document as Input / Output.
Hooray! From now on each time you’ll save a document all trailing space will be stripped!

Fixing Haml Spacing problem with Textmate


Sunday, November 12, 2017

Software Quality Attributes Rating Tool

www.gettingagile.com/wp-content/uploads/2009/05/softwarequalityattributes-ratingtool.xls



Notes from Software Debt Book

Leave the campground cleaner than you found it.

Always leave the code in better shape than when you started.

The following questions should help you decide whether to start refactoring when you see an opportunity for it:

1. Does this change directly affect the feature I am working on?
2. Would the change add clarity for the feature implementation?
3. Will the change provide automated tests where there currently are none?
4. Does the refactoring look like a large endeavor involving significant portions of the application components?

Refactor if the answer to the first three questions is an yes. If the answer to the fourth question is yes. Then I use experience as a guide to help me produce a relative size estimate of the effort involved in this refactoring compared to the initial estimate of size for the feature implementation. If the size of the refactoring is significantly larger than the original estimate given to the Product Owner, I will bring the refac- toring up to the team for discussion. Bringing up a large refactoring to the rest of the team will result in one of the following general outcomes:

The team thinks it is good idea to start the large refactoring because its estimated size does not adversely affect delivery of what the team committed to during this iteration.
The team decides that the refactoring is large enough that it should be brought up to the Product Owner. The Product Owner could add it to the Product Backlog or decide to drop scope for the current iteration to accommodate the refactoring.
Another team member has information that will make this refactor- ing smaller or not necessary. Sometimes other team members have worked in this area of code or on a similar situation in the past and have knowledge of other ways to implement the changes needed.


Simplicity — the art of maximizing the amount of work not done—is essential.

Design Review

Design review sessions are periodic meetings where team members are able to share and get feedback on design decisions. Effective design reviews involve the development team members. The design review provides a forum for the team to converge on common design decisions and ultimately clarity in the application’s structure. The typical design review session involves all development team members. The agenda for the meeting is sent out to the team beforehand and includes the one or more design decisions that will be discussed. At the meeting, each design decision is presented while the rest of the team asks questions and dis- cusses the merits and challenges they see. Through this discussion the devel- opment team captures action items to take into the software construction process.

Sunday, October 08, 2017

Gitbook Notes

https://github.com/GitbookIO/gitbook/blob/master/docs/setup.md
https://toolchain.gitbook.com/syntax/markdown.html#images

Saturday, October 07, 2017

Full Stack Developer Course Notes

Development Environment Setup

1. Install browser-sync https://browsersync.io/

npm install -g browser-sync

2. browser-sync --version

3. Start the browser-sync to watch all the files for changes.

browser-sync start --server --directory --files "*"

Wednesday, September 06, 2017

UI User Story Example

Miya is part of the awesome group called The Foundation. She is a developer by trade and she wants to send cold email to do market research in her area of interest, IP law. She tries quickemail.io and finds it's interface very confusing. She is new to cold email marketing. She signsup for toutapp and finds that it is very bloated. She posts on TF forum to get some recommendation for cold email marketing automation tools. They recommend vocus which is also not beginner friendly. She has questions like: Will this allow me to upload a CSV file and schedule the emails to send out based on template. Vocus website does not provide any answers to these questions.

Miya found the quickmail.io interface very confusing to use. Instead of days, you had to convert the days to hours for the followup sequence. It had variation and A/B testing as part of the setup which was not required for her initial set of emails to be sent. It was difficult to find the merge fields and had to contact support several times over the period of 5 days. She did not know whether it was a bug due to the browser she was using or which icon would display the merge fields. She had a specific task to complete but found it extremely difficult to use the product. The training video she found on youtube channel of quickmail.io was irrelevant and she wasted few hours of her time watching the unrelated video to her task. She was very frustrated.

As a developer she started to do research on open tracking and threading features found in other products. She figured out threading is not really required. She found out that only the first email open must be tracked and ignore the email open when they are replying to her email. Scheduling the emails to trigger would require a fair amount of work. She found some good resources on how to authenticate to use the Gmail API for sending emails.

Goal: Cold email and followup for contacting prospects

Tuesday, September 05, 2017

Business Model Canvas for SaaS Business

Key Partners
What can you outsource to whom?

Web Hosting Providers
IaaS Providers
Open Source Projects

Key Activities
What will you need to master?

Customer interviews
Product Development (Product design, Software Development)
Deployment and Maintenance

Key Resources
What do you ned to build up?

Code base
Developers

Value Propositions
What is your unique value proposition?

Business Productivity and Collaboration

Customer Relationships

Customer Conference
Associations
Events
Acquire and Lockin

Channels
How to communicate and deliver?

Self service
Web
Phone
Email

Customer Segments
Who are your customers?

IP Attorneys

Cost Structure
What are my costs?

Product development
Partner costs (IaaS)
Marketing and Sales
Hosting Fees
Customer Acquisition Costs
Salaries

Revenue Streams
How will you make money?

Usage based, by user or by transaction

The Four Pillars of Wealth

Clay Collins and Perry Marshal recommend:

1. Automated Sale
2. Recurring Revenue
3. Sell a reproducible product or a tool (break time for money dependency and scale)
4. No accounts receivable (Get paid in advance)

1. Find pains
2. Presell
3. Outsource product development

1. Find the problem
2. Sell the solution
3. Hire a developer

1. Idea discovery
2. Sketch the solution (create a paper prototype to solve the problem)
3. Presell the sketch
4. Outsource product development
5. Launch the product

Find booming industries and sell them software tools.

References

Notes from Dane Maxwell's video transcript 
Read The Automatic Customer by John Warrillow

Wednesday, August 30, 2017

Cold Email Guide

How to achieve reply rates of 40, 50 or 70%.

- Prepare a well targeted prospect list. Don't sell sweets to a diabetics list.
- Number one goal is to get a response (either positive or negative).
- Follow ups lead to 55% of responses.
- Follow up can be a one liner. Just wanted to make sure my email below didn't fall through the cracks.
- Be prepared for rejection.
- Aim for certain ratio and improve it (ex 1 positive reply for each negative reply)
- Contact at least 100 prospects before making any decision
- Make it short, layout a clear offering that compel them into replying
- Just reply 'yes' and I'll send you more information
- Use the name of the person in the email
- Get small commitments before going for big commitments
- You can pre-warm a relationship by using referrals like: Bugs Bunny mentioned I should get in touch with you
- Tuesday to Thursday is the best days to send

Monday, August 28, 2017

Problem Discovery Questions for Conference

I am attending a 3 day conference in my target market. I had to come up with questions based on the amount of time available. The goal is to learn about their problems.

One Question

1. What tasks take up the most time in your day?

Three Questions

2. What's the hardest part of your day?
3. What product do you wish you had that does not exist yet?

Seven Questions

4. What are some unmet needs you have?
5. What could be done to improve your experience with [process/role]?
6. What’s the hardest part about being a [demographic]?
7. What are your most important professional goals?

Wednesday, August 16, 2017

Dealing with Vague Requirements in Software Development

1. Very vague and unknown requirements should be moved out of scope. Use scope control as a way to filter out.
2. Build a quick and dirty throwaway prototype to find answers to the vague / unknown requirements.
3. Identify the vague requirements and ask the product owner the right questions to fill in the blanks.
4. Conduct a requirements grooming session to flesh out the vague requirements.
5. Ask the stake holders to prioritize the backlog and work on the well defined requirements.

Thursday, August 10, 2017

Top Links for Second Week of Aug 2017

https://robots.thoughtbot.com/a-crash-course-in-analyzing-memory-usage-in-ruby
https://blog.codeship.com/advanced-enumeration-with-ruby/
https://thisbitofcode.com/managing-localization-rails/
https://blog.showoff.ie/using-gemstash-for-private-gem-hosting-8b6170da766c
http://semaphoreci.com/blog/2017/08/03/tips-on-treating-flakiness-in-your-test-suite.html
https://semaphoreci.com/blog/2017/08/09/faster-rails-eliminating-n-plus-one-queries.html
https://www.nopio.com/blog/ruby-state-machine-aasm-tutorial/
http://www.pablocantero.com/blog/2017/08/06/using-ruby-and-amazon-sqs-fifo-queues
https://depfu.io/blog/2017/08/02/bundler-and-private-dependencies