<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Vik's Blog]]></title><description><![CDATA[Writings on machine learning, data science, and building a company.]]></description><link>https://www.vikparuchuri.com/</link><image><url>https://www.vikparuchuri.com/favicon.png</url><title>Vik&apos;s Blog</title><link>https://www.vikparuchuri.com/</link></image><generator>Ghost 5.54</generator><lastBuildDate>Tue, 11 Jul 2023 09:45:47 GMT</lastBuildDate><atom:link href="https://www.vikparuchuri.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Startup = ambition]]></title><description><![CDATA[<p>It&apos;s an axiom that startups are <a href="http://www.paulgraham.com/growth.html?ref=vikparuchuri.com">defined by growth</a>. &#xA0;If it&apos;s not growing 10% a month, then your company is seen as something less - a &quot;lifestyle business&quot;.</p><p>The association of startups and growth is an incredibly useful one for the investor class.</p>]]></description><link>https://www.vikparuchuri.com/startup-ambition/</link><guid isPermaLink="false">6016fefcc8be0a0039d627a0</guid><category><![CDATA[business]]></category><dc:creator><![CDATA[Vik Paruchuri]]></dc:creator><pubDate>Sun, 31 Jan 2021 22:10:43 GMT</pubDate><content:encoded><![CDATA[<p>It&apos;s an axiom that startups are <a href="http://www.paulgraham.com/growth.html?ref=vikparuchuri.com">defined by growth</a>. &#xA0;If it&apos;s not growing 10% a month, then your company is seen as something less - a &quot;lifestyle business&quot;.</p><p>The association of startups and growth is an incredibly useful one for the investor class. &#xA0;They buy call options on a bunch of talented people, and convince them to scale their businesses as quickly as possible. &#xA0;Most crack under the pressure. &#xA0;At the best of times, a small company is a series of poorly arranged Jenga blocks. &#xA0;If you add on new blocks as quickly as possible, <a href="https://www.investopedia.com/articles/personal-finance/040915/how-many-startups-fail-and-why.asp?ref=vikparuchuri.com">most will collapse</a>. </p><p>Only a lucky few survive long enough to reach scale and return 100x+ to their original investors. &#xA0;These are the startups you&apos;ve heard of - like Uber, Instacart, and Facebook. &#xA0;They&apos;ve made the careers of their early investors, and they&apos;ve made their founders incredibly wealthy.</p><p>But they&apos;ve done this by creating a system of regressive taxation. &#xA0;Yes, Uber is an incredibly useful service for helping people get around. &#xA0;But it&apos;s also a way to skim <a href="https://www.marketwatch.com/story/this-is-how-much-uber-drivers-really-make-2018-05-15?ref=vikparuchuri.com">40% of the wages of their drivers</a> - some of the lowest paid people in their countries - and redirect them to the pocketbooks of the rentier class. &#xA0;And sure, Facebook is a way to keep in touch with your family. &#xA0;But it&apos;s also a way for the wealthy to monetize the attention of everyone else. &#xA0;I guarantee you that Facebook&apos;s early investors weren&apos;t spending <a href="https://www.fool.com/investing/2018/02/06/people-still-spend-an-absurd-amount-of-time-on-fac.aspx?ref=vikparuchuri.com">41 minutes a day on the site</a>. &#xA0;</p><p>There are people making 7 and 8 figures a year at Uber and Facebook thinking about how to increase these tax rates. &#xA0;For Uber, this is lowering how much drivers make. &#xA0;For Facebook, this is &quot;engaging&quot; (read: sucking up more and more of your attention) you more. &#xA0;This is what happens when your primary obligation is to your shareholders. &#xA0;You just find more and more ways to squeeze.</p><p>It&apos;s through pursuing growth at all costs that we get a world where <a href="https://www.theguardian.com/business/2019/jan/21/world-26-richest-people-own-as-much-as-poorest-50-per-cent-oxfam-report?ref=vikparuchuri.com">26 people own as much wealth as 4 billion</a>. &#xA0;On that list are Elon Musk, Mark Zuckerberg, Jeff Bezos, and Larry Page. &#xA0;Each of their companies has underpaid workers, knowingly flouted labor laws, and dodged taxes. &#xA0;It&apos;s hard not to see the companies these men created as a form of regressive taxation.</p><p>I hope I&apos;ve painted a picture of how the mantra of startup=growth can lead to horrible externalities. &#xA0;So what should startups be about?</p><p>To figure this out, I think we have to step back to the very earliest days of a startup. &#xA0;When it&apos;s just a couple of founders, and an idea. &#xA0;What gets a startup from this point to growth in the first place? &#xA0;It&apos;s ambition. &#xA0;Ambition to solve a pain point for a customer. &#xA0;In Uber&apos;s case, it was helping wealthy people get rides more efficiently. &#xA0;For Facebook, it was connecting kids on college campuses.</p><p>To grow, a small company needs to serve its core customer incredibly well. &#xA0;So ambition comes before growth. &#xA0;Would Facebook have been less ambitious if they&apos;d just focused on connecting college students to each other? &#xA0;I&apos;d argue no, because there is a lot of depth there - everything from better events to dating to textbooks. &#xA0;Serving a small audience with depth isn&apos;t inherently less ambitious than serving a larger audience more shallowly. &#xA0;It requires just as much product innovation, and is more impactful to the audience. &#xA0;Think of a teachers. &#xA0;It&apos;s hard to argue that teachers aren&apos;t making an impact - they make an enormous impact on the lives of students. &#xA0;It&apos;s not an impact that scales. &#xA0;But that doesn&apos;t make it any less meaningful.</p><p>Framing startups in terms of growth means that companies eventually subjugate their impulse to serve their customer better to their impulse to serve their shareholders better. &#xA0;Facebook could have built a monetizable service around the needs of college students. &#xA0;But the company chose to chase growth over serving its customers better. &#xA0;And this growth has ultimately been negative for the world.</p><p>It&apos;s time for a new definition of startups. &#xA0;One framed in terms of ambition. &#xA0;Startups focus on being the best at solving a particular customer problem. &#xA0;And if growing faster means sacrificing that ambition, then a startup chooses ambition over growth.</p>]]></content:encoded></item><item><title><![CDATA[There's no one right way to build a business]]></title><description><![CDATA[<p>As I&apos;ve scaled <a href="https://www.dataquest.io/?ref=vikparuchuri.com">Dataquest</a>, one of the hardest things for me to come to grips with has been that there is no one right way to build a business. &#xA0;This may be surprising to you. &#xA0;After all, it doesn&apos;t seem like a very complicated</p>]]></description><link>https://www.vikparuchuri.com/theres-no-one-right-way-to-build-a-business/</link><guid isPermaLink="false">5fd189f76024ea003955a743</guid><category><![CDATA[management]]></category><category><![CDATA[business]]></category><dc:creator><![CDATA[Vik Paruchuri]]></dc:creator><pubDate>Thu, 10 Dec 2020 03:27:24 GMT</pubDate><content:encoded><![CDATA[<p>As I&apos;ve scaled <a href="https://www.dataquest.io/?ref=vikparuchuri.com">Dataquest</a>, one of the hardest things for me to come to grips with has been that there is no one right way to build a business. &#xA0;This may be surprising to you. &#xA0;After all, it doesn&apos;t seem like a very complicated truth. &#xA0;But the reasons why this has been a persistent belief for me are informative for others in my shoes.</p><p>When I started Dataquest, I didn&apos;t start with a top-down plan of how I was going to build a business. &#xA0;Instead, I started with a problem - in this case, that data science education wasn&apos;t focusing on teaching real-world skills. &#xA0;Most technical people that I talk to start a business this way.</p><p>As Dataquest started to scale and get thousands of users, I knew that I was solving at least some of this problem. &#xA0;But solving a problem isn&apos;t a binary endeavor. &#xA0;It&apos;s not either solved or unsolved. &#xA0;In my case, I wanted to solve the problem for more people, in more topic areas. &#xA0;This meant adding more breadth and depth to the product I had.</p><p>To do this, I had to scale the company. &#xA0;This is distinct from scaling the product. &#xA0;The company is the infrastructure that builds the product. &#xA0;This point is where things started to get messy.</p><p>Reading online about how to scale a small software company inevitably leads advice from VCs and accelerators. &#xA0;I personally read a ton of advice from YCombinator. &#xA0;The advice says to raise a seed round, then keep raising more money until you IPO (my summary is reductionist, but generally accurate).</p><p>There&apos;s nothing wrong with this way of building a business. &#xA0;The important thing I&apos;d add, though, is that it&apos;s <strong>a way</strong> not <strong>the way</strong>. &#xA0;Unfortunately, it&apos;s often presented as the only way to scale.</p><p>Following this advice meant that I turned my focus from how to solve a problem to how to convince investors I could solve that problem. &#xA0;These are unfortunately two very distinct skills. &#xA0;You can be <a href="https://mailchimp.com/?ref=vikparuchuri.com">great at solving a problem without being great at convincing investors</a>, and <a href="https://lambdaschool.com/?ref=vikparuchuri.com">vice versa</a>. &#xA0;</p><p>I see many other technical founders fall into this trap. &#xA0;I think it&apos;s because we&apos;re seeking determinism in the act of building a company. &#xA0;When you&apos;re coding and building, there are relatively straightforward ways to know pretty quickly if you&apos;re doing the right thing. &#xA0;While the same thing doesn&apos;t exist for building a business, advice from investors and accelerators can make the problem seem deterministic - &quot;if you follow this checklist, you&apos;ll build a successful company&quot;. </p><p>Inevitably, that particular checklist means that the goal becomes raising money in a highly structured way. &#xA0;At some point, the way you&apos;re building the business and what you want to build the business for no longer align.</p><p>To combat this, my main advice is to <strong>first figure out what type of company you want to build, then work backwards to figuring out the way you want to get there</strong>. &#xA0;</p><p>This is another principle that seems quite simple, but is actually difficult to nail down. &#xA0;Figuring this out involves figuring out what you really value. &#xA0;Do you want to build a really effective product for a small group of people? &#xA0;Do you want to build the biggest business possible and reach as many people as possible? &#xA0;Do you want to be a manager or a builder?</p><p>It&apos;s only through answering these questions that you can figure out what type of business you want to build. &#xA0;<strong>And you&apos;re the only one who can figure that out</strong>.</p><p>In my next post, I&apos;m going to dive into more depth around how to figure out what type of business you want to build.</p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[A guide for bootstrapped startups navigating COVID-19]]></title><description><![CDATA[<p>In just a few weeks, COVID-19 has reached most countries, and changed the lives of billions of people worldwide. &#xA0;The impacts range from the catastrophic (illness and loss of work) to the inconvenient (shelter in place orders). &#xA0;This is a time of uncertainty, with conflicting information coming from</p>]]></description><link>https://www.vikparuchuri.com/a-guide-for-startups-navigating-covid-19/</link><guid isPermaLink="false">5e7f8570bba1c70044a8434f</guid><category><![CDATA[management]]></category><dc:creator><![CDATA[Vik Paruchuri]]></dc:creator><pubDate>Sun, 29 Mar 2020 16:34:27 GMT</pubDate><content:encoded><![CDATA[<p>In just a few weeks, COVID-19 has reached most countries, and changed the lives of billions of people worldwide. &#xA0;The impacts range from the catastrophic (illness and loss of work) to the inconvenient (shelter in place orders). &#xA0;This is a time of uncertainty, with conflicting information coming from official sources.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.vikparuchuri.com/content/images/2020/03/Screen-Shot-2020-03-28-at-11.12.22-PM.png" class="kg-image" alt loading="lazy"><figcaption>COVID-19&apos;s worldwide spread</figcaption></figure><p>It&apos;s hard enough to run a bootstrapped startup or small business in normal times, but COVID-19 has made things 10x harder. As the CEO of <a href="https://www.dataquest.io/?ref=vikparuchuri.com">Dataquest</a>, a 30-person startup, it&apos;s been challenging for me to figure out how to support our team and customers.</p><p>In the last couple of weeks, I&apos;ve spent a lot of time researching and planning, and I&apos;m sharing what I&apos;ve learned in the hope that it will help you. &#xA0;In this post, I&apos;ll share how to navigate COVID-19 from 3 perspectives:</p><ul><li><strong>Impact on your team</strong>. &#xA0;Many people are having to suddenly change the ways in which they work while dealing with anxiety about the future. &#xA0;This includes working remotely, health impacts, and working around disruptions to the day to day.</li><li><strong>Business impact.</strong> &#xA0;Revenue in a lot of industries is dropping quickly, and being able to forecast and plan will help many businesses weather the next year or two. &#xA0;This includes forecasting revenue, extending runway, and adjusting strategy.</li><li><strong>Impact on your customers</strong>. &#xA0;Millions of people are impacted around the world, and your business may be a major part of their lives. &#xA0;Engaging with your customers will help you build trust. &#xA0;This includes clear communication, giving benefits to customers, and connecting with the community.</li></ul><p>If you want to skip to a specific section, you can use these links to navigate:</p><!--kg-card-begin: markdown--><ul>
<li><a href="#background">Background</a></li>
<li><a href="#team-impact">Team impact</a>
<ul>
<li><a href="#remote-work">Remote work</a></li>
<li><a href="#health-impacts">Health impacts</a></li>
<li><a href="#disruptions-to-normal-life">Disruptions to daily life</a></li>
</ul>
</li>
<li><a href="#financial-impact">Financial impact</a>
<ul>
<li><a href="#forecasting-revenue-impacts">Forecasting</a></li>
<li><a href="#extending-your-runway">Extending runway</a></li>
</ul>
</li>
<li><a href="#customer-impact">Customer impact</a></li>
</ul>
<!--kg-card-end: markdown--><h1 id="background">Background</h1><p>Before I dive into advice, it&apos;s important to align on the parameters of the situation. &#xA0;Businesses dealing with COVID-19 really have two different events to navigate; the pandemic, and the recession caused by the measures to contain the spread of the pandemic.</p><h2 id="shelter-in-place">Shelter In Place</h2><p>To deal with the pandemic first, it seems likely that it will take 2-3 months of lockdown measures to halt the progress of COVID-19 in most countries. &#xA0;Looking at <a href="https://www.statista.com/chart/21112/covid-19-growth-curve-selected-countries/?ref=vikparuchuri.com">this chart</a>, we can see that it took about 2 months in China:</p><figure class="kg-card kg-image-card"><img src="https://www.vikparuchuri.com/content/images/2020/03/corona_chart.png" class="kg-image" alt loading="lazy"></figure><p>The quarantine in Wuhan <a href="https://www.bloomberg.com/news/articles/2020-02-24/china-eases-quarantine-of-wuhan-after-month-long-lockdown?ref=vikparuchuri.com">started on January 23rd</a>, and will end on April 8th. &#xA0;This is about 2.5 months of quarantine.</p><p>This may be a bit optimistic in other countries, like the US, where cases are growing much more quickly. &#xA0;</p><figure class="kg-card kg-image-card"><img src="https://www.vikparuchuri.com/content/images/2020/03/image-2.png" class="kg-image" alt loading="lazy"></figure><p>As this chart shows, it&apos;s possible that some level of lockdown may stay in place through the summer. &#xA0;It&apos;s early, but it also seems likely that there will be some kind of <a href="https://www.reuters.com/article/us-health-coronavirus-wuhan-secondwave/beware-second-waves-of-covid-19-if-lockdowns-eased-early-study-idUSKBN21D1M9?ref=vikparuchuri.com">resurgence in the fall</a>, once the lockdown measures end.</p><p>However we look at it, it&apos;s best to plan for some level of travel restrictions and shelter in place orders through the end of the year.</p><h2 id="economic-impact">Economic Impact</h2><p>The other point to align on is the economic impact of COVID-19.</p><p>China&apos;s GDP likely <a href="https://www.cnbc.com/2020/03/24/china-beige-book-q1-contraction-in-chinas-economy-from-coronavirus.html?ref=vikparuchuri.com">contracted 10%</a> in the first quarter of this year, taking into account the shelter in place orders in February and March. &#xA0;It&apos;s unclear how quickly the recovery will happen, but businesses are still not back up to 100% now.</p><p>Goldman Sachs forecasts a large contraction in the US economy in Q2, with a gradual recovery:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.vikparuchuri.com/content/images/2020/03/image-3.png" class="kg-image" alt loading="lazy"><figcaption>A US economic forecast from Goldman Sachs</figcaption></figure><p>After the 2008 financial crisis, the economy didn&apos;t<a href="https://en.wikipedia.org/wiki/Great_Recession?ref=vikparuchuri.com"> fully recover until 2011</a>. &#xA0;It&apos;s likely that recovery this time will be gradual as well. &#xA0;A fast recovery will be prevented by 3 factors:</p><ul><li>Ongoing outbreaks in other countries reducing trade</li><li>Fear of going back to work in-person</li><li>Ongoing shelter in place restrictions</li></ul><p>For a small business, it&apos;s important to plan for this being a 1-2 year event. &#xA0;This is painful to think about, but it&apos;s better to plan for the worst case than to be too optimistic.</p><h1 id="team-impact">Team Impact</h1><p>Now that we&apos;re hopefully aligned on the background, let&apos;s dive into the impact this will have on your team.</p><p>There are a few categories to think about:</p><ul><li>Transitioning to remote working</li><li>Health impacts</li><li>Disruptions to normal life</li></ul><h2 id="remote-work">Remote Work</h2><p>Millions of people are suddenly transitioning to remote work, and tools like Zoom and Slack are seeing massive surges in usage.</p><p>But working effectively remotely is about more than tools - it&apos;s also about adapting the processes you to use to coordinate your work.</p><h3 id="sharing-context">Sharing context</h3><p>When you&apos;re an in-person company, context can get shared implicitly, through casual conversations and brainstorming session.</p><p>This isn&apos;t easily possible online - you have to be explicit about context. &#xA0;We were a remote company before COVID-19, and we use a few strategies to overcome with this:</p><ul><li>We document everything across the company using <a href="https://notion.so/?ref=vikparuchuri.com">Notion</a>. &#xA0;Each team can access documentation from other teams.</li><li>We send out a regular internal newsletter that contains important updates, like revenue, key metrics, and customer stories.</li><li>We default to written communication first for sharing context. &#xA0;This means that we don&apos;t hold meetings just to share context - we use the meetings to reinforce context that was already communicated in writing.</li><li>We share notes from all of our meetings with the rest of the company.</li></ul><h3 id="async-first">Async-first</h3><p>In person, it&apos;s easy to use asynchronous communication channels, like Slack, as a secondary communication channel. &#xA0;In a remote company, it&apos;s important to switch to async-first, where meetings are only used for critical decisions or discussion, and async is used for everything else.</p><p>It&apos;s also important to set boundaries - Slack can easily turn into a mess of notifications, which interrupt focus time for everyone.</p><ul><li>We setup hours where people <em>shouldn&apos;t</em> be responsive on Slack (this varies by timezone). &#xA0;This is important to ensure that people aren&apos;t always-on.</li><li>We have a &quot;standard meeting calendar&quot; where certain types of meetings can only happen at certain times. &#xA0;This prevents people&apos;s calendars from getting clogged with meetings.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.vikparuchuri.com/content/images/2020/03/image-4.png" class="kg-image" alt loading="lazy"><figcaption>Our &quot;standard meeting&quot; calendar. Purple represents actual standing meetings, and green represents blocks when certain types of meetings can be scheduled.</figcaption></figure><ul><li>We have agendas for all of our meetings, so it&apos;s clear why we&apos;re meeting, and what types of decisions (if any) we&apos;re making.</li></ul><h3 id="soliciting-feedback">Soliciting feedback</h3><p>In-person, it&apos;s easy to tell how people are feeling, and adjust how you manage. &#xA0;It&apos;s much harder to do this remotely. &#xA0;We use a few tools to ensure that we&apos;re able to effectively manage and get feedback remotely:</p><ul><li>We use <a href="https://www.15five.com/?ref=vikparuchuri.com">15Five </a>to structure our manager 1:1s, and do a weekly &quot;pulse check&quot; to see what challenges people across the company are facing.</li><li>We do quarterly <a href="https://www.cultureamp.com/?ref=vikparuchuri.com">CultureAmp</a> surveys to surface latent concerns and address them.</li><li>We do a regular leadership team Q&amp;A so people can share their concerns. (some of these are anonymous)</li><li>We do check-ins at the beginning and the end of meetings to ask how people are feeling</li></ul><h3 id="building-connections">Building connections</h3><p>It can be a lot harder to build connections with others in a remote environment. &#xA0;There are a few things we do to help with this:</p><ul><li>We match people across the company up weekly for social calls</li><li>We have Slack channels for interests like books, scifi, pets, and more</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.vikparuchuri.com/content/images/2020/03/jabba.png" class="kg-image" alt loading="lazy"><figcaption>Baby Jabba from our scifi channel (you had to be there)</figcaption></figure><ul><li>We do virtual cards and small gifts for birthdays, anniversaries, etc.</li></ul><h2 id="health-impacts">Health Impacts</h2><p>The second area to think about is health impacts on your team. &#xA0;This is a time when many people are sick, or are anxious about themselves or their friends and family getting sick. &#xA0;There are steps you can take to give your team the time and space they need to take care of themselves and their loved ones:</p><ul><li>PTO/time off policies</li><li>Cancelling travel</li><li>Expanding benefits</li></ul><h3 id="time-off-policies">Time off policies</h3><p>This is a time to think about expanding your PTO policy, and/or making it more flexible. &#xA0;People may have more unexpected days off, or need more days to recharge during this time. &#xA0;Consider adopting a flexible time work schedule or time off policy during the next few months.</p><p>Regulations here vary by country, but the US just passed <a href="https://www.dol.gov/agencies/whd/pandemic/ffcra-employee-paid-leave?ref=vikparuchuri.com">the FFCRA</a>, which may apply to your company. &#xA0;For companies under 500 employees, with certain exceptions, the Department of Labor website states that businesses need to give:</p><ul><li><em>Two weeks of paid sick leave<strong> </strong>at the employee&#x2019;s regular </em>rate of pay where the employee is unable to work because the employee is quarantined and/or experiencing COVID-19 symptoms</li><li><em>Two weeks of paid sick leave<strong> </strong>at two-thirds the employee&#x2019;s regular rate of pay</em> because the employee is unable to work because of a bona fide need to care for an individual subject to quarantine, or to care for a child &#xA0;whose school or child care provider is closed or unavailable for reasons related to COVID-19</li><li><em>Up to an additional 10 weeks of paid expanded family and medical leave at two-thirds the employee&#x2019;s regular rate of pay </em>where an employee, is unable to work due to a bona fide need for leave to care for a child whose school or child care provider is closed or unavailable for reasons related to COVID-19</li></ul><p>Employers will be compensated for this time off, and will be able to deduct it from their payroll taxes. &#xA0;The mechanism is unclear, but the IRS <a href="https://www.irs.gov/newsroom/treasury-irs-and-labor-announce-plan-to-implement-coronavirus-related-paid-leave-for-workers-and-tax-credits-for-small-and-midsize-businesses-to-swiftly-recover-the-cost-of-providing-coronavirus?ref=vikparuchuri.com">is working on it now</a>.</p><p>If your business has less than 50 people, it is possible to apply for an exemption, although it&apos;s currently unclear how to do that. &#xA0;You can read more about the FFCRA <a href="https://gusto.com/blog/people-management/families-first-coronavirus-response-act?ref=vikparuchuri.com">here</a>.</p><h3 id="cancelling-travel">Cancelling travel</h3><p>Hopefully, I convinced you in the background section that there will be disruptions to daily life from COVID-19 through the end of the year. &#xA0;At Dataquest, we&apos;ve cancelled travel through at least the end of the summer, and are reevaluating travel for the remainder of the year.</p><p>One option is to convert in-person meetings, such as offsites, into remote meetings.</p><h3 id="expanding-benefits">Expanding benefits</h3><p>Something else to consider is expanding benefits during the next few months. &#xA0;There are mental health and telemedicine services that might be useful to your team, such as:</p><ul><li><a href="https://www.doctorondemand.com/?ref=vikparuchuri.com">Doctor on Demand</a></li><li><a href="https://www.joinmodernhealth.com/?ref=vikparuchuri.com">Modern Health</a></li><li><a href="https://www.talkspace.com/?ref=vikparuchuri.com">Talkspace</a></li></ul><p>In a time of anxiety, benefits like this can make a big difference. &#xA0;In cities around the world, people are going outside less, which can have mental health consequences:</p><figure class="kg-card kg-image-card"><img src="https://www.vikparuchuri.com/content/images/2020/03/image-8.png" class="kg-image" alt loading="lazy"></figure><p>Mental health benefits can help with the general stress of remote working and remote living.</p><h2 id="disruptions-to-normal-life">Disruptions to normal life</h2><p>Many people are having to shelter in place, and care for loved ones during the day. &#xA0;You can support folks in a few ways:</p><ul><li>Normalizing schedule changes</li><li>Creating &quot;safe spaces&quot;</li></ul><h3 id="normalizing-schedule-changes">Normalizing schedule changes</h3><p>Many parents are having to take care of their children during the day, because schools and daycares are closed. &#xA0;Many others are having to take care of elderly relatives.</p><p>To help these people feel supported, consider:</p><ul><li>Enabling people to shift their hours. &#xA0;Schedules may need to shift on a weekly or daily basis, especially when coordinated childcare.</li><li>Enabling people to skip meetings. &#xA0;If you&apos;re documenting agendas and notes, it becomes more &quot;normal&quot; to skip meetings, and there is less fear of missing important context.</li><li>Proactively checking in on team members to see how they&apos;re holding up. &#xA0;This can make a big difference, and can surface latent concerns.</li><li>Normalizing disruptions during meetings. &#xA0;At Dataquest, many people now have kids and/or significant others popping in on calls.</li></ul><h3 id="creating-safe-spaces">Creating &quot;safe spaces&quot;</h3><p>It can be hard to go through an anxiety-inducing time alone. &#xA0;Many people have concerns other than work on their minds. &#xA0;Consider:</p><ul><li>Creating a dedicated covid-19 channel in Slack for people to share how they&apos;re feeling, and tips for managing anxiety and schedule disruptions.</li><li>Proactively sharing your own concerns can create space for others to share theirs.</li></ul><h1 id="financial-impact">Financial Impact</h1><p>Many businesses around the world have been impacted, or will be impacted, by COVID-19. &#xA0;This covers both this &quot;lockdown&quot; period, and the longer-term recession that will come about as a result.</p><p>Small business revenue has <a href="https://docs.google.com/presentation/d/1IUTHX2kTagUUV88HUJCkp_P6iZgLCXXVHD9UeOwU_1w/edit?ref=vikparuchuri.com#slide=id.g71b0a47020_30_486">declined significantly</a> in the past few weeks in the US:</p><figure class="kg-card kg-image-card"><img src="https://www.vikparuchuri.com/content/images/2020/03/image-6.png" class="kg-image" alt loading="lazy"></figure><p>It&apos;s hard for any business to continue when it loses a portion of revenue. &#xA0;It&apos;s critical to work as quickly as possible to understand and plan for the next 12 months.</p><p>In this section, I&apos;ll discuss:</p><ul><li>Forecasting out the revenue impacts</li><li>Extending your runway</li><li>Adjusting your strategy</li></ul><h2 id="forecasting-revenue-impacts">Forecasting revenue impacts</h2><p>It&apos;s critical to have good forecasting, so you can make good decisions. &#xA0;You&apos;re unlikely to make perfect forecasts, but try to plan out 3-4 scenarions that span a range of possibilities from worst case to best case.</p><p>To do this, you&apos;ll need to:</p><ul><li>Have accurate data</li><li>Find reasonable comparisons</li><li>Do scenario planning</li></ul><h3 id="get-accurate-data">Get accurate data</h3><p>Ideally, you have an accountant, and use an online tool like Xero or Quickbooks to keep track of expenses.</p><p>Look at your profit and loss statements for the last 12 months. &#xA0;Then do the following to forecast out the next 12 months:</p><ul><li>Add in any future spending you&apos;ve committed to, like hiring and new tool usage.</li><li>Take into account annual raises.</li><li>Make sure to properly attribute one-time expenses, like annual subscriptions (these will create &quot;spiky&quot; expenses in future months that you may not have accounted for).</li></ul><p><a href="https://www.score.org/resource/financial-projections-template?ref=vikparuchuri.com">This link</a> has a basic financial planning template if you need more information. &#xA0;<a href="https://startuprunway.io/?ref=vikparuchuri.com">Startup Runway</a> and <a href="https://www.liveplan.com/?ref=vikparuchuri.com">LivePlan</a> are also tools that can help you model and forecast expenses.</p><p>If your business has a SaaS model, I&apos;d also recommend setting up a tool like <a href="https://baremetrics.com/?ref=vikparuchuri.com">Baremetrics</a> or <a href="https://chartmogul.com/?ref=vikparuchuri.com">ChartMogul</a>. &#xA0;These tools will help you understand and forecast your revenue.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.vikparuchuri.com/content/images/2020/03/image-7.png" class="kg-image" alt loading="lazy"><figcaption>Some of the data you can get in ChartMogul</figcaption></figure><h3 id="find-reasonable-comparisons">Find reasonable comparisons</h3><p>You need to find comparisons for both what will happen during the shelter in place, and what will happen afterwards due to the recession.</p><p>For the shelter in place part, I&apos;d recommend researching how your sector is doing in terms of revenue in areas that have been locked down, or are sheltering in place. &#xA0;For example, if you&apos;re in an area where the lockdowns have just started, you can look to see what happened in areas that have been under lockdown for some time, like California, Wuhan, Spain, and Italy.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.vikparuchuri.com/content/images/2020/03/Screen-Shot-2020-03-28-at-11.48.48-PM.png" class="kg-image" alt loading="lazy"><figcaption>Industrial output in China</figcaption></figure><p>For the recession part, I&apos;d recommend looking at how public companies in your sector did during the last recession. &#xA0;In our case, we&apos;re in online education, and were able to look at companies like Pluralsight, Lynda, Capella, and Rosetta Stone.</p><p>These comparisons will help you make more realistic estimates about what will happen to your revenue in the coming months.</p><h3 id="doing-scenario-planning">Doing scenario planning</h3><p>Once you have accurate expense and revenue data, and have a rough idea of how you&apos;ll be impacted in the next year or so, you can start to do some scenario planning.</p><ul><li>Based on your data, what&apos;s the &quot;realistic&quot; worst case? &#xA0;Obviously, worst case is losing all of your revenue for the next year, but that might be very improbable. &#xA0;What&apos;s the 5th percentile case for your revenue in the next year? (ie, there is a 95% chance your revenue will be at this level or higher in the next year)</li><li>What&apos;s the average case for your revenue?</li><li>For the purposes of this exercise, it&apos;s not completely necessary to plan for the best case, but you might want to do it, just in case.</li></ul><h2 id="extending-your-runway">Extending your runway</h2><p>Once you understand your &quot;realistic&quot; worst case, you can plan for how to get enough runway to avoid that case. &#xA0;First, determine how much additional money you&apos;ll need to make it through the next 12 months in the worst case.</p><p>Then, you&apos;ll need to:</p><ul><li>Cut expenses</li><li>Get loans and/or grants</li><li>Adjust your strategy</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.vikparuchuri.com/content/images/2020/03/image-11.png" class="kg-image" alt loading="lazy"><figcaption>Looking at monthly runway for a startup called Mattermark</figcaption></figure><h3 id="cut-expenses">Cut expenses</h3><p>Cutting expenses in a small company is a very hard decision. &#xA0;It&apos;s likely that you don&apos;t have a lot of room to cut expenses without impacting your business.</p><p>For example, we&apos;ve prioritized keeping the team together, and we&apos;re cutting other expenses, like hosting costs and other tools.</p><p>You&apos;ll need to audit all of your expenses, and categorize them by how important they are to your business.</p><p>Since you already know how much you&apos;ll need to cut, you&apos;ll be able to work through this list and figure out what expenses to cut. &#xA0;Don&apos;t forget to cut future expenses if necessary, like hires your have planned on your roadmap.</p><p>If you have to conduct layoffs, many countries are offering enhanced unemployment benefits. &#xA0;In the US, <a href="https://gusto.com/blog/people-management/covid-state-unemployment-insurance-benefits?ref=vikparuchuri.com">several states</a> are offering enhanced unemployment benefits. &#xA0;The federal government is also giving an extra <a href="https://www.cnn.com/2020/03/25/politics/senate-stimulus-unemployment-benefits-coronavirus/index.html?ref=vikparuchuri.com">$600 a week</a> to people who are unemployed.</p><h3 id="get-loans-or-grants">Get loans or grants</h3><p>There are many loan options that are becoming available. &#xA0;In the US, the SBA is offering economic injury and disaster loans (EIDL) and enhanced 7a loans, called the paycheck protection program (PPP). &#xA0;You can read more about them <a href="https://www.angelcapitalassociation.org/data/Documents/Public%20Policy/The_Small_Business_Owner_s_Guide_to_the_CARES_Act.pdf?rev=E169&amp;ref=vikparuchuri.com">here</a>.</p><p>Here&apos;s the breakdown:</p><ul><li>Paycheck protection program loans are 100% federally guaranteed loans that require no collateral or personal guarantee. &#xA0;You can borrow up to 2.5x your average monthly payroll from February 15th, 2019, to June 30th, 2019. &#xA0;Some portion of this loan can be forgiven if you use it for payroll. &#xA0;Otherwise, it turns into 10 year term loan with 4% interest.</li><li>Economic injury and disaster loans can be up to $2 million, and are to cover costs, like payroll, that now cannot be met due to COVID-19. &#xA0;If you apply, you can get an automatic $10k grant within 3 days.</li></ul><p>You can apply for both programs, although you&apos;ll need to roll the grant into the PPP if you get an EIDL, then a PPP loan. &#xA0;You can apply for PPP loans through any <a href="https://www.fundera.com/business-loans/guides/sba-lenders?ref=vikparuchuri.com">SBA 7a lender</a>, such as Wells Fargo and Chase Bank. &#xA0;You can apply for EIDL on the SBA website <a href="https://www.sba.gov/disaster/apply-for-disaster-loan/index.html?ref=vikparuchuri.com">here</a>.</p><p>Some states and cities in the US are also offering grants, which you can read about <a href="https://docs.google.com/spreadsheets/d/1SRBZE2_6Nftwd02M6Oxj8MoeuZ7y93spXIgIPhkkp2w/edit?ref=vikparuchuri.com#gid=0">here</a>.</p><p>Finally, some private entities are offering grants, including:</p><ul><li>Facebook, which is offering <a href="https://www.facebook.com/business/boost/grant">ad credits</a>.</li><li>Google, which is also offering <a href="https://support.google.com/google-ads/answer/9803410?hl=en&amp;ref=vikparuchuri.com">ad credits</a>.</li></ul><h3 id="adjust-your-strategy">Adjust your strategy</h3><p>Per <a href="https://www.amazon.com/Good-Strategy-Bad-Difference-Matters/dp/0307886239?ref=vikparuchuri.com">Good Strategy/Bad Strategy</a>, which I highly recommend reading, strategy is about:</p><ul><li>A diagnosis of a challenge or opportunity</li><li>A guiding plan to work through the challenge</li><li>A set of actions to work towards the plans</li></ul><p>COVID-19 has changed many of our background assumptions about the world, and thus makes most diagnoses obselete. &#xA0;Strategy helps us apply the limited resources of a startup towards the places where they&apos;ll create the most leverage.</p><p>Without a correct diagnosis, you won&apos;t have an effective strategy. &#xA0;You may have set your annual strategy just a couple of weeks ago, but it&apos;s probably obsolete already. &#xA0;Think about how your customers might shift in the next year. &#xA0;For example, if your company does something related to delivery, will this spike in deliveries last? &#xA0;How might shelter in place interact with the recession to change demand? &#xA0;</p><p>On the other hand, if your business is related to restaurants, how long might the lockdown last? &#xA0;Post-lockdown, how might spending patterns change?</p><h1 id="customer-impact">Customer Impact</h1><p>COVID-19 is affecting most people around the world - a group that probably includes your customers. &#xA0;There are many ways you can help support your customers through this time, including:</p><ul><li>Clear communication how your business will be impacted</li><li>Giving benefits to people affected by COVID-19</li><li>Helping your community connect</li></ul><h2 id="clear-communication">Clear communication</h2><p>If your business will be impacted, it&apos;s very important to message your customers about this. &#xA0;People may rely on your services day to day, and being proactive in messaging will help to build trust.</p><p>One example is this message from UPS:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.vikparuchuri.com/content/images/2020/03/Screen-Shot-2020-03-28-at-11.05.04-PM.png" class="kg-image" alt loading="lazy"><figcaption>UPS is a critical service for many people, and this message helps to create some trust.</figcaption></figure><h2 id="giving-benefits">Giving benefits</h2><p>The world has changed a lot in the past few weeks:</p><ul><li>Many people have been laid off</li><li>Many are in lockdown, and can&apos;t go outside</li><li>The ways we all work have changed</li></ul><p>Companies that offer tools for remote working have a lot of expertise to share in times like this. &#xA0;One example is this email from BambooHR:</p><figure class="kg-card kg-image-card"><img src="https://www.vikparuchuri.com/content/images/2020/03/Screen-Shot-2020-03-28-at-11.03.41-PM.png" class="kg-image" alt loading="lazy"></figure><p>If you have expertise that could be valuable to your customers at a time like this, sharing it will help you add value to people in what is a pretty dark time for many.</p><p>At Dataquest, we&apos;re working on extending existing scholarships for our students, and offering new scholarships to students affected by COVID-19.</p><h2 id="community-connection">Community connection</h2><p>Finally, if you have a customer community, don&apos;t neglect to help your customers connect to each other and share their advice and experiences. &#xA0;Your customers will be able to support each other in ways that you can&apos;t.</p><h1 id="you-can-get-through-this">You can get through this</h1><p>This is a dark time for small businesses worldwide. &#xA0;We have to help our teams and customers navigate this pandemic, while potentially dealing with falling revenue. &#xA0;To add to the stress, many governments are prioritizing helping big businesses over small businesses.</p><p>In writing this guide, I hope that sharing what&apos;s worked for me will help you through this time. &#xA0;Small businesses are critical to the world, and I hope that you, and your team, are able to get through this time.</p>]]></content:encoded></item><item><title><![CDATA[How to rapidly improve your management skills]]></title><description><![CDATA[<p>It can be overwhelming when you start as a new manager, or when you&apos;re an existing manager who is asked to take on more responsibility.</p><p>The success criteria for your role suddenly change, and in many ways, you&apos;re responsible for defining them. &#xA0;Even if you</p>]]></description><link>https://www.vikparuchuri.com/how-to-rapidly-improve-your-management-skills/</link><guid isPermaLink="false">5e10cb45bc0baf0038158df7</guid><category><![CDATA[management]]></category><dc:creator><![CDATA[Vik Paruchuri]]></dc:creator><pubDate>Sat, 04 Jan 2020 18:38:36 GMT</pubDate><content:encoded><![CDATA[<p>It can be overwhelming when you start as a new manager, or when you&apos;re an existing manager who is asked to take on more responsibility.</p><p>The success criteria for your role suddenly change, and in many ways, you&apos;re responsible for defining them. &#xA0;Even if you were good at what you did previously, you basically have to transition into a completely new role.</p><p>It&apos;s common when you hit a state change like this to seek out resources like books and advisors. &#xA0;The problem is that these resources often increase the feeling of being overwhelmed. &#xA0;<a href="https://www.amazon.com/Effective-Executive-Definitive-Harperbusiness-Essentials/dp/0060833459?ref=vikparuchuri.com">The Effective Executive</a> has dozens of precepts that you have to follow to succeed as a leader. &#xA0;<a href="https://www.amazon.com/High-Output-Management-Andrew-Grove-ebook/dp/B015VACHOK?ref=vikparuchuri.com">High Output Management</a> has multiple new frameworks that you&apos;ll need to implement to succeed. &#xA0;<a href="https://www.amazon.com/Radical-Candor-Kim-Scott/dp/B01KTIEFEE?ref=vikparuchuri.com">Radical Candor</a> asks you to reshape how you approach giving feedback. &#xA0;And on and on as you read more management books.</p><p>Even advisors can&apos;t always help you cut through the feeling of having to complete dozens of items on a checklist to succeed. &#xA0;Every advisor has a slightly different management philosophy honed over years. &#xA0;Thus, advisors often forget how hard it is to be a new manager, and add dozens more items to your list.</p><p>Not to say that these resources are bad. &#xA0;On the contrary, they&apos;re essential to succeeding as a manager. &#xA0;The key is to figure out how to prioritize the skills you need to develop to succeed as a manager and tackle them in small chunks.</p><p>As a solo technical founder, I&apos;ve faced this problem multiple times as <a href="https://www.dataquest.io/?ref=vikparuchuri.com">Dataquest</a> has grown from just me to 30+ people. &#xA0;And I haven&apos;t always succeeded. &#xA0;</p><p>Through my failures (and my successes), I&apos;ve identified a framework for how to rapidly and effectively build management skills. &#xA0;In this post, I&apos;ll share how you can stop feeling overwhelmed and start improving.</p><h2 id="step-1-put-yourself-in-a-situation-where-you-need-to-grow-your-management-skills">Step 1: Put yourself in a situation where you need to grow your management skills</h2><p>I firmly believe that it&apos;s impossible to learn management skills in a vacuum. &#xA0;You need a context in which you&apos;re able to continuously practice what you&apos;re learning and get feedback.</p><p>This means that if you&apos;re on the management track, but aren&apos;t yet a manager, you should find a way to start taking some management responsibility. &#xA0;Can you take over 1:1s with some of your managers reports? &#xA0;Is there a way for you to lead some of the strategy and planning of your team?</p><p>Part of this is also tailoring the resources you seek out to your level as a manager. &#xA0;For example, if you&apos;re a completely new manager, <a href="https://www.amazon.com/Making-Manager-What-Everyone-Looks-ebook/dp/B079WNPRL2?ref=vikparuchuri.com">The Making of a Manager</a> is a good book to read, but The Effective Executive probably isn&apos;t. &#xA0;Similarly, finding advisors who have led or are leading small teams will be more productive than reaching out to Fortune 500 CEOs. &#xA0;Look for resources that are &quot;just ahead&quot; of where you are.</p><h2 id="step-2-gather-data">Step 2: Gather data</h2><p>As a new manager, or an existing manager stretching your skills, you&apos;re going to make mistakes. &#xA0;A lot of mistakes. &#xA0;And that&apos;s okay. &#xA0;We often think of management as a &quot;you have it or you don&apos;t&quot; skill, but the truth is that management skills are built over years. &#xA0;Being a successful programmer, designer, or marketer doesn&apos;t mean that you&apos;re going to be a successful manager right off the bat.</p><p>As you make these mistakes, it&apos;s important to gather data on what you&apos;re doing correctly, and what you&apos;re not. &#xA0;This is the only way to identify areas to improve. &#xA0;Remember that being a successful manager is about the long-term and short-term output of your team. &#xA0;The only way to judge how effective you are at this is to ask your reports, and the person you report to.</p><p>There are three main ways to gather feedback:</p><ul><li>Structured surveys, like 360s</li><li>1:1s</li><li>&quot;Just-in-time&quot; feedback</li></ul><h3 id="structured-surveys">Structured surveys</h3><p>I highly recommend doing periodic 360s to check in on your performance. &#xA0;I recommend doing both anonymous and non-anonymous surveys. &#xA0;They will both give you different signals, and the anonymous surveys might uncover trust issues on your team.</p><p>At Dataquest, we use <a href="https://www.15five.com/?ref=vikparuchuri.com">15Five</a> to do 4 annual 360 surveys. &#xA0;The specific tool is less important than making sure that you do them on a regular cadence, and genuinely reflect and internalize the feedback with an open mind.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.vikparuchuri.com/content/images/2020/01/Screen-Shot-2020-01-04-at-9.53.55-AM-copy.png" class="kg-image" alt loading="lazy"><figcaption>Some non-anonymous 360 feedback that I found useful.</figcaption></figure><p>We also do 1-2 annual anonymous 360 surveys. &#xA0;We do this though a coaching platform that we use, <a href="https://www.torch.io/?ref=vikparuchuri.com">Torch</a>, but there are many other ways to do these. &#xA0;Torch breaks down the anonymous feedback along skill axes, which helps you prioritize what to improve:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.vikparuchuri.com/content/images/2020/01/Screen-Shot-2020-01-04-at-10.03.37-AM-1.png" class="kg-image" alt loading="lazy"><figcaption>You can see where I thought I was in red, and where everyone else thought I was in white.</figcaption></figure><p>This anonymous feedback can help identify blind spots, and helps people feel more safe to give feedback. &#xA0;This is especially useful when you haven&apos;t yet built trust with your team.</p><h3 id="1-1s">1:1s</h3><p>1:1s are a great place to solicit and get more context on feedback. &#xA0;I recommend asking a consistent set of questions to people on your team weekly, and then using them to create a 1:1 agenda. &#xA0;We also use 15Five for this at Dataquest.</p><p>In the weekly set of questions, I specifically ask for critical feedback:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.vikparuchuri.com/content/images/2020/01/Screen-Shot-2020-01-04-at-10.07.25-AM.png" class="kg-image" alt loading="lazy"><figcaption>Some feedback I got recently.</figcaption></figure><p>Asking more freeform questions about your performance and building understanding during 1:1s is also very valuable.</p><h3 id="just-in-time-feedback">Just-in-time feedback</h3><p>This is very hard to do if you don&apos;t have bidirectional trust with your team, so I don&apos;t recommend doing it if you&apos;re new to management. &#xA0;But asking for feedback during a meeting, or just after a meeting, can be a great way to get actionable feedback. &#xA0;The context is still fresh in everyone&apos;s mind, and you can quickly get to the heart of concerns.</p><h2 id="step-3-prioritize">Step 3: Prioritize</h2><p>If you&apos;re like me, at this point, you&apos;ll have a long list of things to work on. &#xA0;It may seem like all of these concerns are urgent, and that you need to work on them immediately. &#xA0;<strong>Resist that impulse</strong>. &#xA0;Similarly to a team that is overloaded with too many priorities, if you try to improve everything at the same time, you won&apos;t make any progress.</p><p>At this stage, I recommend narrowing your focus down to 1-2 key areas. &#xA0;For example, my goals for the last 3 months were to improve my facilitation, and how well I listened and internalized feedback.</p><p>It can be extremely hard to prioritize, but luckily, you have the data that will help you do so. &#xA0;What themes come up over and over in your feedback? &#xA0;What would make the biggest impact on the team?</p><p>If you have advisors in place, they can be extremely helpful with this question. &#xA0;Using your team as a sounding board can also be very productive (if you have the right level of trust, of course).</p><h2 id="step-4-find-the-right-resources">Step 4: Find the right resources</h2><p>I categorize resources into three groups: advisors, books, and coaches. &#xA0;They&apos;re all useful in different ways, and I&apos;ll walk through how you can maximize the effectiveness of each.</p><h3 id="advisors">Advisors</h3><p>Advisors are people who have managed before. &#xA0;Getting their perspective can be extremely important in identifying your strengths and weaknesses as a leader, and narrowing down your focus areas.</p><p>Advisors can also be very helpful for walking through tactical problems that you&apos;re having in management, and brainstorming how you can improve.</p><p>Advisors are most useful for perfecting the craft of management - how you should structure your time, how you should relate to your team, and so on. &#xA0;The downside of advisors is that they often lack specific context on your team.</p><p>One commonly overlooked source of advisors is others within your company. &#xA0;It&apos;s not uncommon for your peers or direct reports to have more expertise in a specific area than you. &#xA0;Seeking them out and asking for advice can be a fast way to improve, since they already have built-in context.</p><h3 id="books">Books</h3><p>Management books can be extremely useful, if you fit them to your goals, and not the other way around. &#xA0;For example, if you&apos;ve identified giving feedback as a focus area, then reading Radical Candor might be helpful for you. &#xA0;</p><p>As I mentioned earlier in this post, reading management books can be overwhelming, and it&apos;s the process of fitting the books to your goals that makes them more manageable.</p><h3 id="coaches">Coaches</h3><p><a href="https://www.glassdoor.com/blog/executive-leadership-coaching/?ref=vikparuchuri.com">Leadership coaches</a> can be extremely valuable to growing your management skills. &#xA0;This is because management is about how you relate to others. &#xA0;In order to be able to relate to others, you also have to understand how to relate to yourself.</p><p>Coaching and therapy are closely related. &#xA0;I&apos;ve found that a therapist helps you explore the landscape of your mind and your emotions, and increase your awareness. &#xA0;A coach helps you operationalize this awareness, by helping you relate to the outside world (your reports and your manager) more effectively. &#xA0;Coaches also help you dig underneath the surface, and discover what is causing your strengths and weaknesses in management. &#xA0;It may seem very fuzzy, but I&apos;ve found it extremely effective. </p><p>For me, most of the barriers to being an effective manager weren&apos;t external factors - they were all about my mindset and awareness. &#xA0;Additionally, you&apos;ll often need to coach your team members and help them improve their skills. &#xA0;Being able to learn the frameworks of coaching can be invaluable in this.</p><p>If you have the time and money, I highly recommend getting a coach and a therapist.</p><h2 id="step-5-test">Step 5: Test</h2><p>At this point, you understand your focus areas, and you&apos;ve gathered a bunch of ideas on how to address them from your resources.</p><p>Once you&apos;ve done that, it&apos;s a matter of experimenting, and seeing what works for you. &#xA0;It&apos;s very similar to a product development process - not every feature is going to work, but it&apos;s through experimentation and measurement that you find the right course.</p><p>I recommend trying to keep the feedback loop here as tight as possible. &#xA0;If you try a new way to run a meeting, ask for feedback as soon as possible. &#xA0;If you try a different way of structuring your 1:1s, ask how it went at the end.</p><p>If an experiment is working, try consulting your resources to see how you can double down on it. &#xA0;If it isn&apos;t consider dropping it and moving on to the next idea.</p><p>Progress won&apos;t come instantly, but if you try these experiments for a few months, you&apos;ll be amazed at how far you&apos;ll go.</p><h2 id="step-6-keep-improving">Step 6: Keep improving</h2><p>As you try your experiments, you should be constantly gathering data. &#xA0;Eventually, you&apos;ll hit a point where you feel like you&apos;ve improved your focus areas enough. &#xA0;Once you hit this point, it&apos;s time to move on to new focus areas. &#xA0;Go back to the gather data step, pick 2 new focus areas, and continue from there.</p><p>The fun and the pain of management is that you&apos;re never done improving. &#xA0;There will always be new challenges - new team members, new ways of working, and new responsibilities. &#xA0;It&apos;s only by continuously improving that you can stay ahead of these and keep succeeding.</p><h2 id="becoming-a-better-manager">Becoming a better manager</h2><p>I hope that this framework helps you become a better manager. &#xA0;I personally have found them extremely valuable. &#xA0;If you have any questions or comments, please reach out to me on Twitter <a href="https://twitter.com/vikparuchuri?ref=vikparuchuri.com">@vikparuchuri</a>.</p>]]></content:encoded></item><item><title><![CDATA[You don't need to perfect to be a good manager]]></title><description><![CDATA[<p>The first year or two after transitioning into management can be incredibly difficult. &#xA0;Most new managers get promoted after they excel in an individual contributor role. &#xA0;But once you become a manager, it becomes clear that none of the skills and behaviors that helped you excel in your</p>]]></description><link>https://www.vikparuchuri.com/you-dont-need-to-perfect-to-be-a-good-manager/</link><guid isPermaLink="false">5dfec0c7695cbc00383b99c6</guid><category><![CDATA[management]]></category><dc:creator><![CDATA[Vik Paruchuri]]></dc:creator><pubDate>Sun, 22 Dec 2019 01:37:12 GMT</pubDate><content:encoded><![CDATA[<p>The first year or two after transitioning into management can be incredibly difficult. &#xA0;Most new managers get promoted after they excel in an individual contributor role. &#xA0;But once you become a manager, it becomes clear that none of the skills and behaviors that helped you excel in your previous role will help you in your new one.</p><p>To ramp up the difficulty even more, the criteria for whether or not you&apos;re succeeding suddenly change once you become a manager. &#xA0;In your previous role, you could be successful even if your team wasn&apos;t. &#xA0;As a manager, you&apos;re suddenly managed on the quality of work of your entire team.</p><p>If you were lucky, you had some time to apprentice under a successful manager, and picked up some lessons. &#xA0;If you weren&apos;t, you&apos;re trying to cobble together lessons from books, blog posts, and other managers to make it work.</p><p>Either way, it quickly becomes obvious that there&apos;s a steep learning curve ahead. &#xA0;Once you get to this point, I think there are two paths you can take:</p><ul><li>You can try to get everything right off the bat, and be &quot;perfect&quot;</li><li>You can accept that you aren&apos;t going to be the best manager immediately, and focus on learning as fast as you can</li></ul><p>I made the mistake of taking the first route when I first became a manager. &#xA0;I had been an an engineer before I became a manager. &#xA0;As engineers, we&apos;re conditioned to understand that becoming an excellent engineer takes time - it&apos;s hard to architect amazing systems when you&apos;re just a couple of years in.</p><p>But it wasn&apos;t clear to be at the time that the <strong>same thing is true of management</strong>. &#xA0;Most books you read on management talk about what it means to be a good manager, but very few talk about how long of a road it will be to get there.</p><p>Thus, it&apos;s easy to fall into the trap of feeling like you have to follow all of the advice you read and be &quot;perfect&quot; to succeed. &#xA0;If you&apos;ve read more than a couple of management books, you know that there are a seemingly endless list of things you need to do to be a &quot;good&quot; manager. &#xA0;You have to do everything from set the vision to plan roadmaps t<em>o </em>coach employees.</p><p>Thinking that you have to start doing all of these things at once can make the job of manager overwhelming. &#xA0;When we&apos;re overwhelmed, it&apos;s easy to get into reactive mode, and jump from crisis to crisis.</p><p>I fell into this trap for a while. &#xA0;I was doing the things that a manager should be doing (1:1s, performance reviews, roadmaps, etc), but I wasn&apos;t getting the right results. &#xA0;The output of the team was low, and we weren&apos;t aligning on goals. &#xA0;I was stuck, and didn&apos;t know how to get better as a manager. &#xA0;I thought I was doing all of the things I was supposed to.</p><p>Over time, I realized that this was because I was doing too much. &#xA0;I realized that trying to be a perfect manager had led me to follow a todo list without actually considering the core of the role, and the impact I wanted to have.</p><p>I realized that by doing less, I could be intentional about what skills I wanted to build over time. &#xA0;Instead of being perfect in every area, I could accept that I wasn&apos;t going to be great in some areas for a while, and progressively build my abilities in them over time.</p><p>For example, 6 months ago, I wasn&apos;t great at setting OKRs. &#xA0;I set a 3-month goal to get better at setting OKRs, which led to me getting much better in that area. &#xA0;In the past few months, I got feedback that I wasn&apos;t doing well at facilitation, and have been able to focus on improving my skills there.</p><p>The only way to do this was to accept that there are things that I&apos;m doing poorly as a manager, and seek out feedback on what those areas were. &#xA0;It&apos;s possible to improve as an individual contributor without feedback (although it&apos;s very hard). &#xA0;As a manager, your job is to get people working together effectively towards a goal. &#xA0;Without feedback, it&apos;s impossible to know your impact on those people. &#xA0;</p><p>Feedback is the best tool you have to improve as a manager. &#xA0;It&apos;s only through accepting that you&apos;re not doing everything perfectly that you can set the stage to receive this feedback and grow.</p><p><strong>I think the most important thing any manager can do is recognize that getting good at management will be a long road</strong>. &#xA0;Continuously getting feedback, learning to identify areas of growth, and improving a couple of areas every few months will work much better than trying to get everything correct right off the bat.</p>]]></content:encoded></item><item><title><![CDATA[I barely graduated college, and that's okay]]></title><description><![CDATA[<p>I didn&#x2019;t do very well in high school. &#xA0;My grade point average was around a 2.5 out of 4. &#xA0;I did well in some subjects that I was interested in, like math, computer science, and history, but everything else was a wash. &#xA0;The less</p>]]></description><link>https://www.vikparuchuri.com/i-barely-graduated-college/</link><guid isPermaLink="false">5dfe86ae5bc84f00388d7271</guid><category><![CDATA[college]]></category><dc:creator><![CDATA[Vik Paruchuri]]></dc:creator><pubDate>Thu, 12 Mar 2015 12:00:00 GMT</pubDate><content:encoded><![CDATA[<p>I didn&#x2019;t do very well in high school. &#xA0;My grade point average was around a 2.5 out of 4. &#xA0;I did well in some subjects that I was interested in, like math, computer science, and history, but everything else was a wash. &#xA0;The less homework a class required me to do, the better my grade in that class usually ended up being. &#xA0;In most classes I ended up counting down the minutes to them ending. &#xA0;I wasn&#x2019;t particularly passionate about school, and I wasn&#x2019;t one of those super driven high school students who always seem to be able to fit in homework, a social life, sports, and 10 clubs.</p><p>As a result of my own disinterest, the system seemed to write me off. &#xA0;When applying to summer internships, one teacher wrote an anti-recommendation for me, warning them not to select me. &#xA0;My parents had high expectations for colleges for me &#x2013; Harvard, MIT or bust. &#xA0;To say this was unrealistic would be an underestimate. &#xA0;My guidance counselor told me that getting into college, period, would be a stretch.</p><figure class="kg-card kg-image-card"><img src="https://vik-blog.s3.amazonaws.com/college/rm_demo.jpg" class="kg-image" alt="My high school" loading="lazy"></figure><p><br>My high school being torn down (via Laurie DeWitt&#x2044;The Gazette)</p><p>I applied to around 15 colleges, and got into 2 &#x2013; the University of Maryland (state school for me), and UC Irvine. &#xA0;I ended up going to Maryland as part of the class of 2008. &#xA0;I&#x2019;m from an Indian-American family that puts a lot of stock in scholastic achievement, so this was a constant source of shame to me for years. &#xA0;I would tell people &#x201C;no I got waitlisted to school X&#x201D;, or &#x201C;I actually chose Maryland because of low tuition&#x201D;. &#xA0;In retrospect, it&#x2019;s a silly attitude, but I was young, and put a lot of stock in appearances.</p><p>At Maryland, I wasn&#x2019;t sure what I wanted to major in. &#xA0;My parents wanted me to become a doctor. &#xA0;I wasn&#x2019;t very interested in it, but I took some pre-med classes anyways. &#xA0;I chose general studies as a major (the major for people who don&#x2019;t know what they want to major in), and started fulfilling my basic requirements. &#xA0;College is really unstructured, and I lapsed into a mode where I didn&#x2019;t go to class at all and didn&#x2019;t do homework. &#xA0;Most classes were boring, and I can&#x2019;t learn at all in a lecture setting. &#xA0;Whenever I did go to class, I just ended up counting the minutes until I could become free again. &#xA0;I figured that learning was just not something I was good at. &#xA0;I enjoyed a few classes, like microbiology, where we grew bacteria cultures in petri dishes, history, and math classes. &#xA0;I only discovered I liked multivariable calculus after I stopped going to lecture &#x2013; I went to class every day for the first third, and got a 68% on the test. &#xA0;I switched to staying home and reading the book before tests, and started getting As.</p><figure class="kg-card kg-image-card"><img src="https://vik-blog.s3.amazonaws.com/college/umd_campus.jpg" class="kg-image" alt="UMD Campus" loading="lazy"></figure><p><br>UMD has a pretty nice campus</p><p>I never really found my passion in college, and college didn&#x2019;t provide the tools to help me do it (or maybe it did, and I never looked for them). &#xA0;This meant that I drifted for a year in general studies, and then switched to american history when it became obvious that my grades would never let me get into a med school. &#xA0;It&#x2019;s really easy to get depressed and think that there&#x2019;s something wrong with you when you&#x2019;re conditioned to think that grades are everything, and you have bad grades.</p><p>A couple of years into college, I decided that I needed to pursue my own destiny in life, and part of that was paying for college and my own living expenses. &#xA0;There aren&#x2019;t many jobs out there for college students with low GPAs, but manual labor is always hiring. &#xA0;I went to work at UPS as a loader. &#xA0;My starting pay was around 8 dollars an hour. &#xA0;I always tell people &#x201C;I threw boxes into trucks&#x201D;. &#xA0;Boxes came down a conveyor belt really quickly, and we took them off the belt, scanned them, and stacked them up inside semi trailers that would go out to other UPS &#x201C;hubs&#x201D;.</p><figure class="kg-card kg-image-card"><img src="https://vik-blog.s3.amazonaws.com/college/ups_wall.jpg" class="kg-image" alt="UPS Wall" loading="lazy"></figure><p><br>This is a &#x201C;wall&#x201D;, and how you load trucks at UPS. &#xA0;This is a nice one &#x2013; most look pretty bad.</p><p>I eventually was promoted to &#x201C;part-time supervisor&#x201D;, which meant that I was responsible for running an area, which consisted of a few loaders. &#xA0;I usually worked about 30 hours a week, and was really exhausted the rest of the time, so I went to class less that usual. &#xA0;On the plus side, UPS paid half my tuition with their reimbursement program, and I had enough money to pay my living expenses and even save a bit. &#xA0;I figured that since my grades were really bad, I&#x2019;d just keep working at UPS after college.</p><p>The next two years went by in the same vein. &#xA0;I enjoyed a few of my history classes, notably my capstone where I got to study the reconstruction of Japan post-WW2. &#xA0;When I graduated in 2008, I had a 2.1 GPA. &#xA0;I was almost on academic probation a couple of times, but managed to skate out of it by putting in a bit more effort in a class.</p><p>My options were pretty bleak post-graduation. &#xA0;The higher-ups at UPS wanted me to stay, but they thought I had an attitude problem that I needed to fix before they were willing to promote me (most policies at UPS are really backward and inane, and resulted in people I was supervising getting shafted, so I got upset a lot).</p><p>The tragic thing about manual labor is that your peak earning potential is when you&#x2019;re in your 20s. &#xA0;People who&#x2019;d been working at UPS for more than 10 years had back and knee issues. &#xA0;I got injured a couple of times (banged my head on a pole and got dizzy for a while, later cut my knee really badly, supervisors pressured me not to report it), and my knees weren&#x2019;t in great shape, so staying at UPS probably would have been a bad bet. &#xA0;I learned a lot there, about hard work, motivation, and managing other people, but it wasn&#x2019;t a good long-term fit.</p><p>I ended up getting a job at Pepsi as an operations manager, thanks to a friend (one reason college is valuable!). &#xA0;Around when I started, I also applied to the US Foreign Service on a whim. &#xA0;There aren&#x2019;t many jobs that will accept people with low college GPAs and no &#x201C;hard&#x201D; skills, but getting into the foreign service consists of passing tests, so it seemed like a good fit (plus I was interested in it from studying the Japanese reconstruction).</p><figure class="kg-card kg-image-card"><img src="https://vik-blog.s3.amazonaws.com/college/pepsi_warehouse.jpg" class="kg-image" alt="Pepsi warehouse" loading="lazy"></figure><p><br>The inside of a pepsi warehouse looks something like this.</p><p>I ended up getting into the Foreign Service, although I eventually found that it also wasn&#x2019;t a good long-term fit. &#xA0;I started learning coding towards the tail end of my foreign service life. &#xA0;You can read more about that experience <a href="https://www.vikparuchuri.com/how-learning-to-code-kept-me-sane/">here</a>. &#xA0;I left in late 2011.</p><figure class="kg-card kg-image-card"><img src="https://vik-blog.s3.amazonaws.com/college/georgetown.jpg" class="kg-image" alt="Georgetown" loading="lazy"></figure><p><br>I was posted to Georgetown, Guyana in the foreign service.</p><p>Coding is my passion, and I only really discovered it by going through years of switching jobs and wondering if I would ever find something interesting. &#xA0;But in retrospect, there were signs. &#xA0;I spent every day riding the bus to school in middle school learning to program my ti-83 calculator, and then making a simple game where a monster chased you around the screen. &#xA0;I made scripts to automate certain tasks when I was doing summer internships. &#xA0;I played an online game at one point, and hacked together some simple scripts to help me manage things. &#xA0;But I didn&#x2019;t realize that scripting could ever amount to anything more than a way to make a &#x201C;real job&#x201D; slightly quicker and simpler. &#xA0;My dad also learned programming, but he worked at big consulting firms, and did work that neither he or I found especially interesting. &#xA0;I thought that is what &#x201C;real programming&#x201D; was, and that all the fun scripts that I was making were sideshows.</p><p>Even when I left the Foreign Service, came back to the US, and kept learning to code, I didn&#x2019;t have a clear end path. &#xA0;I just knew that I was doing something that deeply interested me, so I kept doing it. &#xA0;I wanted to predict the stock market, but didn&#x2019;t really know how. &#xA0;I spent time reading up on C# and Ruby, and interfacing with stock price engines. &#xA0;I ended up making a terrible &#x201C;algorithm&#x201D; that would have hard-coded rules (if the stock went up for the past week, sell it today). &#xA0;I remember my excitement at discovering that I could write network code to have some machines be &#x201C;workers&#x201D; and one machine as a control.</p><p>The engines never amounted to anything, but my interest in stock price prediction led me to machine learning, which led me to <a href="http://www.kaggle.com/?ref=vikparuchuri.com">Kaggle</a>. &#xA0;Kaggle is a competition platform for machine learning. &#xA0;You get to make algorithms, which compete against algorithms made by other people around the world. &#xA0;It&#x2019;s a great method for alternative credentialing &#x2013; you can say &#x201C;I don&#x2019;t have a degree from MIT, but I did beat a couple of phds in a Kaggle competition&#x201D;.</p><p>Kaggle was a perfect place for me at the time. &#xA0;I spent my days learning, coding algorithms, and competing. &#xA0;I ended up getting fifth place out of a hundred or so in a stock trading competition, and then I won a few competitions on bond trading and automated essay scoring. &#xA0;I still remember the feeling when I did well in my first competition, and think back on it when I&#x2019;m down &#x2013; the elation that I was actually good at something. &#xA0;The great thing about Kaggle is I suddenly had some validation in the field. &#xA0;I was able to leverage the automated essay scoring algorithms I made to eventually work as a machine learning engineer at <a href="http://www.edx.org/?ref=vikparuchuri.com">edX</a>, a Harvard/MIT/Berkley collaboration in online learning.</p><figure class="kg-card kg-image-card"><img src="https://vik-blog.s3.amazonaws.com/college/edx_office.jpg" class="kg-image" alt="edx" loading="lazy"></figure><p><br>The edX office that I worked at.</p><p>Unsurprisingly, my experience with learning has made me deeply interested in improving the educational system, so I&#x2019;m now working on <a href="https://www.dataquest.io/?ref=vikparuchuri.com">Dataquest</a>, a way to help people learn data science in their browser. &#xA0;I&#x2019;m getting to do things I never imagined were possible, all because I pursued my passion instead of letting my preconceived notions of what a career &#x201C;should&#x201D; be define me.</p><p>In writing all of this out and recollecting, I&#x2019;m startled by how easily something could have gone very differently. &#xA0;If the higher-ups at UPS had promoted me right after I graduated, I might have stuck there for years. &#xA0;If my friend hadn&#x2019;t helped me get a job at Pepsi, I would have been stuck at UPS. &#xA0;If the arbitrary test process at the Foreign Service hadn&#x2019;t accepted me, I may have ended up never coding. &#xA0;I wouldn&#x2019;t change anything, as all of these experiences have shaped me, but it&#x2019;s amazing how a life can hinge on seemingly simple moments.</p><p>It&#x2019;s also interesting how much what happened at school still shapes and defines me. &#xA0;I&#x2019;ve become better at this lately, but when I was first getting into coding, I felt that I constantly had to &#x201C;prove myself&#x201D;, and show that I belonged. &#xA0;I still struggle with feeling like an impostor because I don&#x2019;t have the right credentials. &#xA0;Although the climate is getting better, some companies still share this viewpoint &#x2013; a few finance companies were interested in interviewing me after I won the Kaggle competitions, but stopped responding after I sent my resume. &#xA0;&#x201C;Falling through the cracks&#x201D; of our system can have a negative impact, both in the way you see yourself, and the way the world sees you.</p><p>That said, it&#x2019;s finding your passion and getting good at it that matter, not school. &#xA0;It&#x2019;s never too late to discover or pursue what interests you. &#xA0;You can change your own path whenever you want. &#xA0;I think that if my story illustrates anything, it&#x2019;s that anything is possible.</p><p>So what do I wish had been different? &#xA0;For starters, I wish I had been exposed to more viewpoints on life. &#xA0;Everything drilled into me from a young age was that you go to school, get good grades, and eventually become a doctor. &#xA0;Not getting good grades was never considered an option. &#xA0;Doing what you&#x2019;re interested in instead of what seems like a &#x201C;good career&#x201D; was never considered an option. &#xA0;Ironically, only through discarding that notion did I actually end up at a good career.</p><p>I wish there had been a teacher or other authority figure who took more of an interest in me and helped encourage me to learn what I wanted to learn. &#xA0;My parents bought me books and tried, but coming from India, their mindset was very system-oriented (&#x201C;learn what school makes you learn&#x201D;). &#xA0;I had some great teachers that tried, but they never had the time to devote to individual students.</p><p>I would love to see some fixes for these issues. &#xA0;I think a great starting point is credentialing. &#xA0;How do we help people prove that they know something? &#xA0;Newer services like github, dribbble, and kaggle are great for this, but how do we extend it to teachers? &#xA0;Lawyers?</p><p>Ultimately, I would like to see college either become optional, or more of a free-form experience where you get to actually have more experiences instead of in-classroom time. &#xA0;Getting to intern at a few interesting companies in different fields would have been great. &#xA0;I&#x2019;m already starting to see some really smart high schoolers skip college to get into the workforce because they know what they want, and good for them.</p><p>If you&#x2019;re where I was, and you need someone to talk to, feel free to drop me a line. &#xA0;I know how hard it can be, and I know how valuable talking to someone with a different perspective can be.</p>]]></content:encoded></item><item><title><![CDATA[Making an app as a Valentine's day gift]]></title><description><![CDATA[<p>For the past year, my girlfriend, <a href="https://twitter.com/priyabiyer?ref=vikparuchuri.com">Priya</a> has been working on an awesome nonprofit called <a href="http://www.tulalens.org/?ref=vikparuchuri.com">Tulalens</a>. &#xA0;The idea is to be &#x201C;yelp for low-income people in emerging markets&#x201D;. &#xA0;She did a pilot in October/November 2014 where she and the Tulalens team went into the slums</p>]]></description><link>https://www.vikparuchuri.com/making-an-app/</link><guid isPermaLink="false">5dfe86ae5bc84f00388d7270</guid><category><![CDATA[android]]></category><category><![CDATA[app]]></category><category><![CDATA[tulalens]]></category><category><![CDATA[vik]]></category><dc:creator><![CDATA[Vik Paruchuri]]></dc:creator><pubDate>Thu, 19 Feb 2015 00:45:00 GMT</pubDate><content:encoded><![CDATA[<p>For the past year, my girlfriend, <a href="https://twitter.com/priyabiyer?ref=vikparuchuri.com">Priya</a> has been working on an awesome nonprofit called <a href="http://www.tulalens.org/?ref=vikparuchuri.com">Tulalens</a>. &#xA0;The idea is to be &#x201C;yelp for low-income people in emerging markets&#x201D;. &#xA0;She did a pilot in October/November 2014 where she and the Tulalens team went into the slums of <a href="http://en.wikipedia.org/wiki/Hyderabad?ref=vikparuchuri.com">Hyderabad</a>, and surveyed pregnant women on which hospitals they went to and the quality of care they received. &#xA0;She was then able to analyze the data and figure out the best hospitals in the area.</p><p>Knowing this, she went back to the same women, and told them about the available hospitals, cost, and their quality. &#xA0;The information asymmetry is startling &#x2013; some women were taking buses and travelling 20+ kilometers for appointments when better hospitals were much closer. &#xA0;Another woman was paying bribes to get basic care in a government hospital. &#xA0;All told, 25% of women changed hospitals after hearing about the new alternatives, 43% talked to their providers about getting better care, and 100% talked with their families about the information.</p><figure class="kg-card kg-image-card"><img src="https://vik-blog.s3.amazonaws.com/tulalens/surveying.jpg" class="kg-image" alt="Surveying" loading="lazy"></figure><p><br>Here&#x2019;s Syed (a data collector on the Tulalens team) surveying a young woman</p><p>She wants to scale up her process, and is going back to India in a week to do a larger survey. &#xA0;The only problem? &#xA0;She and her team were using android tablets to collect data. &#xA0;Essentially, you go to a house, talk to a woman, and record her responses into an app while having a conversation. &#xA0;As there is no internet access in the slums, this needs to work offline. &#xA0;The available apps to do this kind of work are very limited, and most are pretty bad. &#xA0;She was using an app that cost ~100 dollars a month for a few users, but rapidly climbed in price to a few thousand dollars a month. &#xA0;It also didn&#x2019;t have all of the features she wanted (multiple language support, ability to edit responses after they were given, ability to identify who collected which response, ability to skip some questions, etc).</p><p>Priya&#x2019;s worked hard to find people who can help her make an app, and two awesome people even helped make a <a href="http://challengepost.com/software/tulolens?ref=vikparuchuri.com">prototype</a> at a hackathon last weekend. &#xA0;It&#x2019;s really hard as a non-technical person to network and find people who can help, but Priya&#x2019;s also found people who can help with making analysis scripts, and do other work. &#xA0;The challenge is pulling all the threads together and building a production-ready survey system that can be used in a week.</p><p>I love the work that Tulalens is doing, and I owe Priya for putting up with me all these years, so I decided to help her make the app as a Valentine&#x2019;s day gift. &#xA0;We&#x2019;re not big on Valentine&#x2019;s day, but it seems like as good an occasion as any for gifts. &#xA0;I&#x2019;m terrible at getting gifts (I remember getting a dress a couple of sizes too big once, but as a plus, I did get some awesome earrings), and Priya doesn&#x2019;t ever ask for anything, so this seemed like a good fit. &#xA0;The only challenge? &#xA0;I&#x2019;m working on <a href="https://www.dataquest.io/?ref=vikparuchuri.com">Dataquest</a>, so I only had about a day to work on the app (this day was Monday (2/16), so a tiny bit late for Valentine&#x2019;s day, but hopefully you&#x2019;ll cut me some slack).</p><h2 id="getting-started-8am-9am-">Getting started (8am - 9am)</h2><p>I spent a little bit of time looking for existing apps that were good for offline surveying. &#xA0;I found a lot of projects that appeared dead, but couldn&#x2019;t find anything good. &#xA0;Lacking time, I moved on to building.</p><p>It had been a couple of years since I touched Java and Android development, and I remembered it being painful. &#xA0;I was right, but not immediately. &#xA0;The installation actually went pretty well. &#xA0;I first installed <a href="http://developer.android.com/sdk/index.html?ref=vikparuchuri.com">Android Studio</a>, then had to grab the <a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html?ref=vikparuchuri.com">JDK</a>.</p><p>I then imported the existing prototype app and took a look at it.</p><figure class="kg-card kg-image-card"><img src="https://vik-blog.s3.amazonaws.com/tulalens/prototype.png" class="kg-image" alt="Prototype" loading="lazy"></figure><p><br>Login screen from the prototype</p><p>I spent some time playing around with the prototype. &#xA0;It was very well done for having been done in an <a href="http://idhack.developersfordevelopment.org/?ref=vikparuchuri.com">overnight hackathon</a> that was ~16 hours (7:30pm - 12pm the next day). &#xA0;I&#x2019;m not sure why this particular format was picked, but it may have had something to do with most of the participants being college students, and having scheduling conflicts.</p><p>The good with the prototype:</p><ul><li>It implemented an authoring platform in-app for surveys.</li><li>It had individual user accounts.</li><li>It used parse, which is always a great first choice for an app backend.</li><li>It was an app people made because they cared about Tulalens (this is awesome!)</li></ul><p>The problems with the prototype:</p><ul><li>It crashed after some questions were answered.</li><li>It didn&#x2019;t have a way to update/edit surveys.</li><li>Survey answering wasn&#x2019;t fully implemented.</li></ul><p>Ultimately, rather than spend time trying to re-architect the prototype, I took some design decisions from it and started fresh with a new app. &#xA0;This was because the time to re-architect the prototype was unknown, but I knew I could make an app from scratch in a day. &#xA0;I can&#x2019;t emphasize enough how awesome it was that Leo and Jeffrey took the time to work on this, and the design decisions (use parse, have individual accounts, etc), helped a lot with making the app.</p><h2 id="the-fun-part-10am-10-30am-">The fun part! (10am - 10:30am)</h2><p>Making surveys on-device is a very helpful feature, but it wasn&#x2019;t strictly necessary, so I decided to skip it and make survey authoring happen on a computer. &#xA0;The surveys could then be synced over to <a href="http://www.parse.com/?ref=vikparuchuri.com">Parse</a>, which is just a database in the cloud, and accessed from the app.</p><p>I googled a bit looking for a good standard survey format, but couldn&#x2019;t find one. &#xA0;I would have searched some more, but time constraints meant that I needed to make one.</p><p>I made a yaml format for surveys that looks like this:</p><pre><code>----------

name: Test Survey
description: Figure out stuff about people
survey_number: 1
language: english
author: Test Guy

----------

type: choice_single
question: |
  What kind of person are you?
options:
  - Choice 1
  - Choice 2
  - Choice 3
  - Choice 4
next_screen:
  - 2
  - 2
  - 3
  - 3
  
-----------

type: text
question: |
  Where are you going next?
  
----------
</code></pre><p>Sections are delimited by 4 or more dashes (&#x2014;&#x2013;). The top section is metadata about the survey, and each subsequent section is a screen in the survey. &#xA0;<code>next_screen</code> refers to the number of the screen that will be shown, depending on the response. &#xA0;With some questions, like <code>Do you own a phone</code>, you want to be able to skip some subsequent questions if someone answers <code>No</code>.</p><p>The other types of questions were <code>choice_multiple</code> (choose multiple options), <code>text</code> (freeform text response), and <code>integer</code> (integer response).</p><p>I whipped up a quick database schema for the surveys and screens, and a python &#xA0;command to sync all the surveys that were put in a folder. &#xA0;<a href="https://github.com/dgrtwo/ParsePy?ref=vikparuchuri.com">Parsepy</a> was a huge help with the syncing.</p><p>Surveys are uniquely identified by <code>survey_number</code>. &#xA0;The database schema stores a version number, so you can update a survey, and all the versions will be stored. &#xA0;Each screen is stored as a row, with a foreign key to the screen. &#xA0;This way, each version of the survey has its own screens, so you never get confusion over whether someone answered the old version of a question, or the new version.</p><p>This was the fun part because I&#x2019;m already really comfortable with python, and that&#x2019;s why doing all of this was so quick. &#xA0;The final code for this step is online <a href="https://github.com/VikParuchuri/tulalens-survey-web?ref=vikparuchuri.com">here</a>.</p><h2 id="first-steps-with-making-an-app-10am-11am-">First steps with making an app (10am-11am)</h2><p>I started fresh with a new app in Android studio. &#xA0;It&#x2019;s on Github <a href="https://github.com/VikParuchuri/TulaLensSurvey?ref=vikparuchuri.com">here</a>. &#xA0;I used the navigation drawer template because it seemed easier than writing my own navigation. &#xA0;After Android Studio created an app skeleton, I stared around for a while trying to re-familiarize myself with Java and the structure of Android programs. &#xA0;I&#x2019;m not ashamed to say that there was some frenzied googling and looking at stackoverflow.</p><p>I needed to first integrate the Parse SDK into the app. &#xA0;I wasted an embarrassingly large amount of time wondering why I was getting errors about <code>symbol parse not found</code>, when I had just forgotten to import it in the main activity of the app, but eventually got over this hump.</p><p>After Parse was integrated, I could add in a login screen with just a couple of lines of code.</p><figure class="kg-card kg-image-card"><img src="https://vik-blog.s3.amazonaws.com/tulalens/login.png" class="kg-image" alt="Login" loading="lazy"></figure><p><br>The login screen. &#xA0;Yes, it&#x2019;s super light, and should be fixed.</p><h2 id="adding-a-listview-and-sync-11am-1pm-">Adding a listview and sync (11am - 1pm)</h2><p>I now needed a way to list out surveys on the device, and to sync them. &#xA0;I decided to use a <code>ListView</code> to do this, with the <code>ParseQueryAdapter</code>. &#xA0;This is a parse builtin class that will do a query to the parse database, and present the results in a list. &#xA0;I used the parse concept of <a href="http://blog.parse.com/2014/04/30/take-your-app-offline-with-parse-local-datastore/?ref=vikparuchuri.com">pinning</a> to only show surveys in the local database to the listview (the listview doesn&#x2019;t access the internet). &#xA0;Pinning is used to add results to the device storage, so you don&#x2019;t need internet access to use them.</p><p>Basically, the data flow is Parse Cloud -&gt; Storage on device -&gt; Listview.</p><p>I needed to build a sync service to get data from the cloud to the device. &#xA0;Once the data was on the device, the sync could be used to update it as needed. &#xA0;I used a query, along with pinning, to store all the current surveys (latest versions) to the local datastore. &#xA0;The list view could then pick these up and show them.</p><figure class="kg-card kg-image-card"><img src="https://vik-blog.s3.amazonaws.com/tulalens/surveys.png" class="kg-image" alt="Survey List" loading="lazy"></figure><p><br>The survey list screen. &#xA0;The sync button is at the top right.</p><h2 id="adding-a-settings-view-with-login-logout-1pm-1-30pm-">Adding a settings view with login/logout (1pm - 1:30pm)</h2><p>I now needed to add a way for people to log out if they wanted. &#xA0;Priya has three tablets, and different people will be using each at different times, so they all need to be able to sign in under their own account. &#xA0;The logout isn&#x2019;t fully implemented (you need to force-close the app after you log out to get back to the login screen), but it works for now.</p><figure class="kg-card kg-image-card"><img src="https://vik-blog.s3.amazonaws.com/tulalens/logout.png" class="kg-image" alt="Settings" loading="lazy"></figure><p><br>The settings view with the logout button.</p><h2 id="the-hard-part-the-survey-engine-1-30pm-3pm-">The hard part! &#xA0;The survey engine (1:30pm - 3pm)</h2><p>I now had to work on the hardest part, rendering the surveys dynamically from the database schema. &#xA0;I made a new fragment called <code>EngineFragment</code> to be the survey rendering engine. &#xA0;A fragment is just a partial view in android, so it&#x2019;s just a screen. &#xA0;When you click on a survey in the surveys list, this fragment is initialized. &#xA0;It loads the screens for the survey from device storage, figures out what type of question needs to be shown first, and loads and shows the right fields for that question type. &#xA0;Different types of questions have different fields that are shown.</p><figure class="kg-card kg-image-card"><img src="https://vik-blog.s3.amazonaws.com/tulalens/survey_mc.png" class="kg-image" alt="Survey MC" loading="lazy"></figure><p><br>A survey with the choice_single type. &#xA0;You can pick one option. &#xA0;The next button goes to the next screen. &#xA0;The bar at the bottom was added later, and will be explained later.</p><figure class="kg-card kg-image-card"><img src="https://vik-blog.s3.amazonaws.com/tulalens/survey_text.png" class="kg-image" alt="Survey Text" loading="lazy"></figure><p><br>A survey with the text type. &#xA0;You can enter any text you want.</p><p>The hardest part here was dynamically rendering any amount of radio buttons and checkboxes for the <code>choice_single</code> and <code>choice_multiple</code> types. &#xA0;I solved this by creating the buttons dynamically and adding them to the screen.</p><h2 id="storing-the-responses-3pm-4pm-">Storing the responses (3pm - 4pm)</h2><p>Once someone hits &#x201C;Next&#x201D;, the response to the question should be stored to the cloud, so it can be accessed and analyzed later. &#xA0;In order to do this, I pulled out the values from the displayed fields, depending on what the question type was, and created a new <code>ScreenAttempt</code> object. &#xA0;This object was associated with a screen (which is associated with a survey object that has a version), so you can keep track of who answered what. &#xA0;A participant id is also generated every time a new survey is started, so you can see which responses were given by which woman. &#xA0;This object was stored to a database row.</p><p>I used the parse <code>saveEventually</code> function, which synced the objects to the cloud once a network connection was available.</p><h2 id="setting-up-everything-on-windows-4pm-5-30pm-">Setting up everything on windows (4pm - 5:30pm)</h2><p>This was honestly the most frustrating part, and involved setting up Python on Priya&#x2019;s computer so she could run the scripts and update the surveys while she&#x2019;s in India. &#xA0;She&#x2019;s a Windows user, sadly. &#xA0;We got python setup, thanks to <a href="https://store.continuum.io/cshop/anaconda/?ref=vikparuchuri.com">Anaconda</a>, but Android Studio just didn&#x2019;t want to work when it came time to import the app project.</p><p>While I worked on helping her, Priya was setting up her tablets and installing all the needed software (Pycharm, Java, Android Studio, Anaconda, Git, etc).</p><h2 id="pushing-the-app-to-google-play-5-30pm-5-45pm-">Pushing the app to Google Play (5:30pm - 5:45pm)</h2><p>Because we couldn&#x2019;t get Android Studio setup on her computer, we needed a way to distribute app updates to the tablets. &#xA0;I pushed the app to Google Play alpha testing (needed to add some screenshots, and write a description) so it could be downloaded remotely to the tablets.</p><h2 id="user-testing-and-bug-fixes-ongoing-">User Testing and Bug Fixes (ongoing)</h2><p>Priya started testing out a lot of the functionality once everything was setup, and started finding some bugs, and needed features. &#xA0;Some of the things we&#x2019;ve addressed:</p><ul><li>Ability to remove surveys from the survey list.</li><li>Ability to go back and edit responses a woman gave if the conversation reveals new information. (this is the seek bar in the screenshots above)</li><li>Crash when using certain values in survey options</li></ul><figure class="kg-card kg-image-card"><img src="https://vik-blog.s3.amazonaws.com/tulalens/priya-vik.jpg" class="kg-image" alt="Priya Vik" loading="lazy"></figure><p><br>Here we are super spaced out after climbing Mt. Cadillac in Maine. &#xA0;I don&#x2019;t have a good picture from after coding this app up, but this approximates our mental states.</p><h2 id="conclusions">Conclusions</h2><p>I&#x2019;m really excited to see this app used, and it&#x2019;s really rewarding to have had the chance to help out with this. &#xA0;I hope it can help a lot of women in India, and around the world, and I&#x2019;d love to see how it could be extended and built on. &#xA0;Right now, the major needs are fixing bugs in the app, and adding in analysis scripts that can pull the data from Parse and display summaries and charts.</p><p>If you want to contribute, drop Priya a line &#x2013; she&#x2019;s priya at tulalens.org, and TulaLens is on twitter <a href="https://twitter.com/tulalens?ref=vikparuchuri.com">@tulalens</a>. &#xA0;The app is on Github <a href="https://github.com/VikParuchuri/TulaLensSurvey?ref=vikparuchuri.com">here</a>, and the survey authoring part is <a href="https://github.com/VikParuchuri/tulalens-survey-web?ref=vikparuchuri.com">here</a> if you want to take a look.</p>]]></content:encoded></item><item><title><![CDATA[How learning to code kept me sane when I was a diplomat]]></title><description><![CDATA[<p>In January of 2011, I joined the <a href="http://en.wikipedia.org/wiki/United_States_Foreign_Service?ref=vikparuchuri.com">US Foreign Service</a>. &#xA0;Along with 80 others, I went through a class called <a href="http://en.wikipedia.org/wiki/A-100_Class?ref=vikparuchuri.com">A-100</a>, and got a crash course on how to be a diplomat. &#xA0;We learned how to address foreign dignitaries. &#xA0;We got lessons in diplomatic history. &#xA0;There</p>]]></description><link>https://www.vikparuchuri.com/how-learning-to-code-kept-me-sane/</link><guid isPermaLink="false">5dfe86ae5bc84f00388d726f</guid><category><![CDATA[java]]></category><category><![CDATA[coding]]></category><category><![CDATA[vik]]></category><dc:creator><![CDATA[Vik Paruchuri]]></dc:creator><pubDate>Mon, 29 Dec 2014 20:50:00 GMT</pubDate><content:encoded><![CDATA[<p>In January of 2011, I joined the <a href="http://en.wikipedia.org/wiki/United_States_Foreign_Service?ref=vikparuchuri.com">US Foreign Service</a>. &#xA0;Along with 80 others, I went through a class called <a href="http://en.wikipedia.org/wiki/A-100_Class?ref=vikparuchuri.com">A-100</a>, and got a crash course on how to be a diplomat. &#xA0;We learned how to address foreign dignitaries. &#xA0;We got lessons in diplomatic history. &#xA0;There was even an optional class on how to comport yourself at diplomatic dinners (I skipped this one). &#xA0;At the end of training, we were ready to change the face of US foreign relations.</p><p>In June, I was sent to <a href="http://en.wikipedia.org/wiki/Georgetown,_Guyana?ref=vikparuchuri.com">Georgetown, Guyana</a>, for a two year assignment (a &#x201C;tour&#x201D; at a &#x201C;post&#x201D; in Foreign Service lingo). &#xA0;During the first year of my tour, I was to do <a href="http://careers.state.gov/work/foreign-service/officer/career-tracks?ref=vikparuchuri.com">consular work</a>, and then switch to economic work for the second. &#xA0;Consular work covers three major areas: nonimmigrant visas (people who want to visit the US), immigrant visas (people who want to become permanent residents of the US), and american citizen services (visiting american citizens in jail, etc). &#xA0;The main commonality between all of them is paperwork. &#xA0;Lots of it.</p><figure class="kg-card kg-image-card"><img src="https://vik-blog.s3.amazonaws.com/best-thing/georgetown.jpg" class="kg-image" alt="Georgetown,Guyana" loading="lazy"></figure><p><br>The famous Stabroek market in Georgetown</p><h3 id="pre-processing-immigrant-visas">Pre-processing immigrant visas</h3><p>All new consular officers at my post were assigned to do pre-processing of immigrant visas. &#xA0;These visas were for people who wanted to migrate to the US and get permanent resident status, so we needed to do a lot of checks to ensure that their applications were legitimate. &#xA0;The task that fell to me was to go through the passport of each person who was applying for an immigrant visa. &#xA0;I had to get the passport number and their name. &#xA0;I then had to do a few things (I am obfuscating this process a bit because the State Department teaches you to be very paranoid):</p><ul><li>Search an online database (let&#x2019;s call it &#x201C;DB1&#x201D;) for previous visa applications</li><li>Search by passport number, and see if any hits came up.</li><li>Search a database for their name, and see if any hits came up.</li><li>Guyana is a country where assumed names are common, and some people don&#x2019;t have a last name, so search for variations of the name on the passport.</li><li>For each hit that was returned, click on the record, wait for it to open, and print it out.</li><li>Search a different database with a separate program (&#x201C;DB2&#x201D;) for criminal and other history</li><li>Use the passport number and name to search.</li><li>Only one record would come up, so print it out.</li><li>All of the printouts were then put in the applicants&#x2019; file so the officer who interviewed them for their visa could have all the information in one place.</li></ul><p>I quickly came to loathe this process. &#xA0;Because we were using very old computers, we only had Internet Explorer 6, and each page could take 10-20 seconds to load. &#xA0;Going through the whole process took two hours (I usually had 20-30 of these to do per day), and it was two hours of unending monotony and boredom. &#xA0;Open a passport, read a name, type in a name, click once to search, click 1-10 times on each record that comes up (DB1 could have multiple records for a single name), and print each one out. &#xA0;And that was just for DB1. &#xA0;I still sometimes look back on the whole process and get unreasonably angry &#x2013; it was a convoluted mess that absolutely should have been automated, and I feel incredibly sorry for anyone who has had to do it.</p><figure class="kg-card kg-image-card"><img src="https://vik-blog.s3.amazonaws.com/best-thing/ie6.gif" class="kg-image" alt="IE6" loading="lazy"></figure><p><br>Remember IE6? &#xA0;I wish I didn&#x2019;t</p><h3 id="using-excel">Using Excel</h3><p>I went through the whole process for about a week before I realized that I needed to fix it to retain my sanity. &#xA0;I starting optimizing parts of the process. &#xA0;The first thing I did was go through all of the passports at the same time, and type everything into Excel. &#xA0;I could then do all of the checks without going back and forth between the computer and the passports. &#xA0;I deleted the file at the end of the process, for security (none of the information was classified or secure, but we had guidelines for handling sensitive information). &#xA0;Net savings from this step was about 10 minutes. &#xA0;I felt kind of good about taking a first step, but I wasn&#x2019;t satisfied &#x2013; the work was still pretty horrible.</p><figure class="kg-card kg-image-card"><img src="https://vik-blog.s3.amazonaws.com/best-thing/excel.gif" class="kg-image" alt="Excel" loading="lazy"></figure><p><br>If you never used Excel, its a spreadsheet tool</p><h3 id="automating-a-single-search">Automating a single search</h3><p>I had taken a <a href="http://en.wikipedia.org/wiki/Java_%28programming_language%29?ref=vikparuchuri.com">Java</a> class in high school, and I knew the very basics of how to program. &#xA0;A crazy idea came to me &#x2013; one any experienced programmer would have probably shot down immediately or found a better way to accomplish. &#xA0;I decided to write a program that clicked on things. &#xA0;The basic idea was that I was entering a name, then clicking on a few things in a predictable sequence. &#xA0;What if a program could move the mouse and click for me? &#xA0;I would save a ton of time. &#xA0;The major wrinkle was handling the varying number of records in the DB1 &#x2013; sometimes there were none, sometimes 1, sometimes 10, and so on.</p><p>I stayed up at night reading about Java, and started doing some simple coding at home. &#xA0;I read some programming books online, the names of which escape me now. &#xA0;I installed <a href="http://en.wikipedia.org/wiki/Eclipse_%28software%29?ref=vikparuchuri.com">Eclipse</a> at home, and started writing programs. &#xA0;I remember my joy when I first made a program move the cursor &#x2013; it&#x2019;s very cool to step back from a computer and see a program you made clicking on things.</p><p>The nice thing about Java was that I didn&#x2019;t need to install anything at work &#x2013; Java was already on the computer, and I could just download and run <a href="http://sourceforge.net/projects/eclipseportable/?ref=vikparuchuri.com">eclipse portable</a> edition without installing it. &#xA0;I decided to make a simple program that displayed one button in the window &#x2013; the button was marked &#x201C;Run&#x201D;. &#xA0;You had to navigate to the starting search screen of DB1 and enter a name or passport number into the search form. &#xA0;Then you brought up the program and hit &#x201C;Run&#x201D;, and some cool stuff happened:</p><ul><li>It moved the cursor over the &#x201C;search&#x201D; button in the form, and clicked it to run the search.</li><li>It waited 30 seconds for the search to finish.</li><li>The results were presented in a list, and each result was a link (and therefore was blue). &#xA0;The results started at certain screen coordinates (let&#x2019;s say (600,500) &#x2013; screen coordinates are in pixels, so if you have a 1920x1080 pixel resolution monitor, (600,500) is close to the center, but in the top left corner), and then each result would be 20 pixels below the previous one. &#xA0;So, I first tested the color at (600,500) on the screen. &#xA0;If it was blue, I clicked the link. &#xA0;Then:</li><li>Wait 30 seconds for the result page to load.</li><li>Click &#x201C;File&#x201D; then &#x201C;print&#x201D; (I forget the exact menu structure in IE6)</li><li>Hit &#x201C;next&#x201D; once on the print dialog and then click &#x201C;print&#x201D;</li><li>At this point, the print dialog went away, and the page was printed out.</li><li>Click the &#x201C;back&#x201D; button to go back to the results page.</li><li>Add 20 to the y axis of the screen coordinate to test.</li><li>Test the color. &#xA0;If blue, then click on the link and go back to the top of these instructions. &#xA0;If not blue, end the program.</li></ul><p>This was way better than what I had before! &#xA0;I could type in a name, hit the &#x201C;Run&#x201D; button in my program dialog, and come back to a screen full of purple links, and a printer full of printouts. &#xA0;It prevented me from having to click on each report, and improved my sanity a lot. &#xA0;But I still had to enter each name manually, and go back and forth a lot to enter the next name. &#xA0;I also couldn&#x2019;t really use my computer while the program was running, so I started reading books at my desk.</p><p>It didn&#x2019;t help at all with DB2, which still had to be searched manually. &#xA0;I then had to put all of the printouts from DB1 together with the matching record from DB2 and put them into the applicant&#x2019;s file.</p><p>Net savings from this step was about 30 minutes a day.</p><h3 id="automating-many-searches">Automating many searches</h3><p>I realized that the bottleneck was me &#x2013; if I didn&#x2019;t have to type in each name manually and click &#x201C;Run&#x201D;, I could save a ton of time. &#xA0;I wondered if there was a way to get data from Excel into Java, so that Java could type in the names for me and run the searches. &#xA0;I read up on <a href="http://en.wikipedia.org/wiki/Open_Database_Connectivity?ref=vikparuchuri.com">ODBC</a>, and how to read excel worksheets from Java. &#xA0;I also read up on how to simulate keyboard entry with Java, and how to show file picker dialogs.</p><p>The &#x201C;Run&#x201D; button morphed, so that now when you clicked it, it popped up a file chooser. &#xA0;You picked a worksheet (in .xls format, I didn&#x2019;t know how much easier csv is!), and then it was loaded in. &#xA0;The first column of the worksheet was the person&#x2019;s name, the second column was the passport number, and each row was a different person.</p><figure class="kg-card kg-image-card"><img src="https://vik-blog.s3.amazonaws.com/best-thing/java-chooser.gif" class="kg-image" alt="Chooser" loading="lazy"></figure><p><br>A Java file chooser</p><p>The program went through each row of the worksheet and:</p><ul><li>Went to the DB1 search page</li><li>Clicked on the &#x201C;first name&#x201D; box, and typed in the person&#x2019;s first name.</li><li>Clicked on the &#x201C;last name&#x201D; box, and typed in the person&#x2019;s last name.</li><li>Ran a search, and then followed the steps to automate a single search above.</li><li>Clicked &#x201C;back&#x201D; when that was done, to go back to the search form.</li><li>Erased the data in the &#x201C;first name&#x201D; and &#x201C;last name&#x201D; boxes.</li><li>Clicked on the &#x201C;passport number&#x201D; field and entered it.</li><li>Re-ran the search, and repeated the steps from automating a single search.</li></ul><p>By the end, I had a nice stack of printouts! &#xA0;All I had to do was enter all of the passport information into the spreadsheet in the right format. &#xA0;This was a major leap forward, and made my life much much better. &#xA0;I still had to do all of the DB2 searches manually though, and go through the stack of DB1 printouts to match the records from DB1 and DB2, and that was a pain.</p><p>Net savings here were about 40 minutes. &#xA0;I had automated the process down from 2 hours to 40 minutes a day &#x2013; a savings of 6 hours and 40 minutes a week. &#xA0;Things were looking up, but there was still more work to do!</p><h3 id="a-hacky-way-to-use-alt-tab">A hacky way to use alt-tab</h3><p>If you use Windows a lot, you know about the alt+tab key combination &#x2013; it lets you switch between programs. &#xA0;You hold them both together, then release the tab key while holding the alt key. &#xA0;This will show a mini window with the active programs in a set order. &#xA0;Then, every time you press tab, it highlights the next program in the window. &#xA0;Whenever you release alt, it will switch to the highlighted program. &#xA0;Using alt-tab helped me switch to DB2 and print out the DB1 and DB2 records together, so I didn&#x2019;t need to collate them manually.</p><figure class="kg-card kg-image-card"><img src="https://vik-blog.s3.amazonaws.com/best-thing/alt-tab.png" class="kg-image" alt="Alt-tab" loading="lazy"></figure><p><br>The alt-tab mini-window</p><p>The process looked something like this:</p><ul><li>Print out hits from DB1 for a given name/passport number combo</li><li>Alt-tab to DB2</li><li>Run a search on DB2 and print out records</li><li>Alt-tab back to DB1 and go to the next person</li></ul><p>The alt-tab code worked using keypress events. &#xA0;It then used pixel color recognition to figure out which programs were open. &#xA0;I made this simpler by only leaving Internet Explorer, Java, and DB2 open (DB2 was a separate program).</p><p>The alt-tab code worked like this:</p><ul><li>Set tabCounter to 1.</li><li>Hold alt and tab, then release tab, and hit tab tabCounter number of times.</li><li>Test the pixel at some top left coordinate in the current program (I found a coordinate that was a different color in the three programs)</li><li>If it is the program you want, stay here. &#xA0;Otherwise, increment tab counter by one, and try alt-tabbing again.</li><li>If you went through 3 alt-tab cycles without getting the program you want, something is wrong, so stop the program.</li></ul><p>DB2 was much easier because you didn&#x2019;t have to search for name and passport number (so you only searched once), and only one record came up, so you only had to print once. &#xA0;The search process was very similar to DB1 &#x2013; enter the information needed, and click &#x201C;Search&#x201D;, then print the page out and go back to the search form.</p><p>With this method, all I really needed to do was enter all the passport information into Excel, and then I could just let it run. &#xA0;I set it up on an unused computer in the office, and just let it run while I did other work. &#xA0;I would come back to a nicely collated stack of printouts that I could then put into the proper applicant files. &#xA0;I would sometimes just stare at the program working &#x2013; it&#x2019;s oddly mesmerizing to see the cursor moving and clicking on things automatically.</p><p>Net savings was 20 minutes a day. &#xA0;I was now saving 8 hours and 20 minutes a week with my program! &#xA0;I was really happy, and much more sane than I was before, although I still had to do nonimmigrant visa interviews (another story, but very draining).</p><h3 id="conclusion">Conclusion</h3><p>I didn&#x2019;t know it at the time, but that program was one of the best things I&#x2019;ve made, if not the best. &#xA0;It solved a real problem, and saved me time. &#xA0;It made my life in Guyana much better (loved my tour, but that&#x2019;s also another story). &#xA0;Best of all, it sparked my own curiosity and love of programming. &#xA0;I was always a mediocre student at best, and making that program motivated me in a way that school never could. &#xA0;It showed me what was possible.</p><p>Almost exactly 1 year after I made that program, I cut my tour short, sold most of my stuff, and came back to the US. &#xA0;I learned programming (starting with machine learning, fun!), and never looked back. &#xA0;I&#x2019;ve managed to make a lot of things that have helped people since then, but few of them can equal what I made then.</p><p>Life&#x2019;s too short to be filled with tedium. &#xA0;If you ever have a chance to automate your job, take it. &#xA0;You&#x2019;ll never know where it might take you. &#xA0;It might even completely change the path you were on.</p>]]></content:encoded></item><item><title><![CDATA[Exploring US Healthcare data]]></title><description><![CDATA[<p>A few days ago, the Centers for Medicare and Medicaid Services (CMS) <a href="http://blog.cms.gov/2014/04/09/historic-release-of-data-delivers-unprecedented-transparency-on-the-medical-services-physicians-provide-and-how-much-they-are-paid/?ref=vikparuchuri.com">released</a> some unprecedented data on the US healthcare system. The data consists of 9 million rows showing how much each doctor in the US charged Medicare, for what, and how much Medicare paid out. It doesn&#x2019;t</p>]]></description><link>https://www.vikparuchuri.com/exploring-us-healthcare-data/</link><guid isPermaLink="false">5dfe86ae5bc84f00388d726e</guid><category><![CDATA[r]]></category><category><![CDATA[python]]></category><category><![CDATA[data]]></category><category><![CDATA[visualization]]></category><category><![CDATA[healthcare]]></category><category><![CDATA[us]]></category><category><![CDATA[vik]]></category><dc:creator><![CDATA[Vik Paruchuri]]></dc:creator><pubDate>Sun, 13 Apr 2014 15:28:00 GMT</pubDate><content:encoded><![CDATA[<p>A few days ago, the Centers for Medicare and Medicaid Services (CMS) <a href="http://blog.cms.gov/2014/04/09/historic-release-of-data-delivers-unprecedented-transparency-on-the-medical-services-physicians-provide-and-how-much-they-are-paid/?ref=vikparuchuri.com">released</a> some unprecedented data on the US healthcare system. The data consists of 9 million rows showing how much each doctor in the US charged Medicare, for what, and how much Medicare paid out. It doesn&#x2019;t quite cover everything (for example, services with less than 11 beneficiaries were removed for privacy reasons), but its the best thing we&#x2019;ve got.</p><p>Immediately after the release, we started seeing <a href="http://www.bloomberg.com/news/2014-04-09/top-Medicare-doctor-paid-21-million-in-2012-data-shows.html?ref=vikparuchuri.com">news stories</a> about how some doctors were making millions of dollars. This information is easily found, and easily sensationalized, but I started to wonder what less obvious things might be in the data.</p><h2 id="getting-the-data">Getting the data</h2><p>You can grab the data <a href="http://www.cms.gov/Research-Statistics-Data-and-Systems/Statistics-Trends-and-Reports/Medicare-Provider-Charge-Data/Physician-and-Other-Supplier.html?ref=vikparuchuri.com">here</a>.</p><p>I decided to use R to analyze it, because of the ease of interactive exploration and making visualizations. &#xA0;You can get the code used throughout this post <a href="https://github.com/VikParuchuri/medicare-analysis?ref=vikparuchuri.com">here</a>.</p><p>Actually working with the data can be a bit tricky, depending on how much RAM you have. I have a good amount, and for convenience just read the whole csv file in with <code>read.csv</code>. You could always use something like the <code>ff</code> package or read the data straight into a database if you have memory limitations.</p><pre><code>pm = read.delim(physician_Medicare, stringsAsFactors=FALSE)
</code></pre><p>Great, now that we have our data, let&#x2019;s explore it.</p><h2 id="surface-level-explorations">Surface level explorations</h2><p>It&#x2019;s good to explore this kind of dataset rather than starting with specific questions to answer.</p><p>Here is a truncated view of the data:</p><pre><code>         npi hcpcs_code line_srvc_cnt average_Medicare_payment_amt
2 1003000126 99222 115 108.11565
3 1003000126 99223 93 158.87000
4 1003000126 99231 111 30.72072
5 1003000126 99232 544 56.65566
6 1003000126 99233 75 81.39000
7 1003000126 99238 95 55.76884
</code></pre><p>The important columns are <code>npi</code>, which is a unique ID for the physician, and <code>hcpcs_code</code>, which is a unique ID for the service the doctor performed. The other two fields will be important down the line. <code>line_srvc_count</code> is how many of the given service the doctor performed, and <code>average_Medicare_payment_amt</code> is how much Medicare paid each time it was performed. You should look at the <a href="https://www.cms.gov/Research-Statistics-Data-and-Systems/Statistics-Trends-and-Reports/Medicare-Provider-Charge-Data/Downloads/Medicare-Physician-and-Other-Supplier-PUF-Methodology.pdf?ref=vikparuchuri.com">data documentation</a> for what the other fields that aren&#x2019;t shown are.</p><p>Right now, the data is unique when <code>npi</code> and <code>hcpcs_code</code> are taken together. So we have a summary of each service that each doctor performed.</p><p>We need to turn this into something that is unique on <code>npi</code> &#x2013; something that is a summary of what each doctor did. This will make comparison and finding useful things much simpler.</p><h2 id="converting-the-data">Converting the data</h2><p>To convert the data, we could use something like <a href="http://cran.r-project.org/web/packages/plyr/index.html?ref=vikparuchuri.com">ddply</a> or the base function <code>by</code>. The problem with these is that they will be very slow for 9 million rows. Even solutions like <code>ff</code> or <code>bigmemory</code> won&#x2019;t help much. We could read the data into a database and then do a <code>group by</code> query to get data in batches, but we already picked the lazy route of reading into memory.</p><p>Fortunately, the <a href="http://cran.r-project.org/web/packages/data.table/index.html?ref=vikparuchuri.com">data table</a> package for R is awesome, and will make what we are doing easy.</p><pre><code>pm = data.table(pm)
phys_summ = pm[
  ,
  list(
    service_total=sum(line_srvc_cnt),
    ben_total=sum(bene_unique_cnt),
    payment=sum(average_Medicare_payment_amt * line_srvc_cnt),
    charged=sum(average_submitted_chrg_amt * line_srvc_cnt),
    allowed=sum(average_Medicare_allowed_amt * line_srvc_cnt),
    unique_services_per_patient=sum(bene_day_srvc_cnt)/sum(bene_unique_cnt),
    duplicates_per_service=sum(line_srvc_cnt)/sum(bene_day_srvc_cnt),
    services_per_patient=sum(line_srvc_cnt)/sum(bene_unique_cnt)
  ),
  by=&quot;npi&quot;
  ]
</code></pre><p>The above code will transform our data so that <code>npi</code> is unique. It will calculate some descriptor variables (feel free to add your own) while it does it. In this case, we will see how much each doctor charged Medicare, how much they were paid, how many beneficiaries they served, and more.</p><h2 id="finally-some-graphs-">Finally, some graphs!</h2><p>Media reports focused on how much the top doctors made, and inequality in general is an interesting approach to this data. Let&#x2019;s look at income inequality among doctors by finding what percentage of the income is made by what percentage of doctors (ie top 5% makes 50% of the income).</p><h3 id="inequality-across-all-physicians">Inequality across all physicians</h3><p>To do this, we need to first just extract the data for doctors, and then calculate the cumulative sum of doctor payments.</p><p>I was actually simplifying things before when I said that the data showed how much each doctor charged Medicare. The data actually has information from organizations (labs, hospitals, etc), as well as doctors. We can filter each one like this:</p><pre><code>docs = phys_summ[nppes_entity_code==&quot;I&quot;]
orgs = phys_summ[nppes_entity_code==&quot;O&quot;]
</code></pre><p><code>nppes_entity_code</code> indicates whether an individual or organization made the charges. We can now calculate our cumulative payments:</p><pre><code>phys_ord = docs[order(docs$payment),c(&quot;npi&quot;, &quot;payment&quot;), with=FALSE]
phys_ord$pay_cumulative = cumsum(phys_ord$payment)
split_dist = floor(nrow(phys_ord)/20)
groups = as.numeric(lapply(1:20, function(x){
  phys_ord$pay_cumulative[split_dist * x]
}))
groups = (groups/groups[20]) * 100
</code></pre><p>The above code will give us how much the first 5% of doctors made, how much the first 10% made, and so on.</p><!--kg-card-begin: html-->
<div id="inequality-chart">
  <svg style="height:500px;"/>
</div>


<script type="text/javascript">
d3.json('https://vik-affirm-assets.s3-us-west-1.amazonaws.com/exploring-us-healthcare-data/doctor_inequality.json', function(data) {
  nv.addGraph(function() {
    var chart = nv.models.lineChart()
                  .color(d3.scale.category10().range())
                  .useInteractiveGuideline(true)
                  ;

  data = [{
      values: data, //values - represents the array of {x,y} data points
      key: 'Cumulative payment percentage', //key - the name of the series.
      color: '#ff7f0e' //color - optional: choose your own line color.
    }];

  chart.xAxis //Chart x-axis settings
      .axisLabel('Percentage of Doctors')
      .tickFormat(d3.format(',r'));

  chart.yAxis //Chart y-axis settings
      .axisLabel('Percentage of Payments')
      .tickFormat(d3.format('.02f'));

    d3.select('#inequality-chart svg')
        .datum(data)
        .call(chart);

    //TODO: Figure out a good way to do this automatically
    nv.utils.windowResize(chart.update);

    return chart;
  });
});
</script><!--kg-card-end: html--><p>The above plot shows how stark the inequality is. The bottom 75% of doctors get 25% of the payments. The top 5% get 47% of all payments. Doctors in this case also includes nurses and other practitioners who get Medicare reimbursement, along with doctors who don&#x2019;t bill Medicare much, so these numbers are likely too extreme.</p><h3 id="gender-based-numeric-inequality">Gender based numeric inequality</h3><p>We can also look at the data by gender. Overall, there are <code>523085</code> male physicians, and <code>302023</code> female.</p><p>Let&#x2019;s break down most common occupations by gender.</p><pre><code>common_occupations = names(tail(sort(table(docs$provider_type)),15))
occupations = do.call(rbind,lapply(common_occupations, function(x){
  data.frame(occupation=x, female_count=nrow(females[females$provider_type==x,]), male_count=nrow(males[males$provider_type==x,]))
}))
</code></pre><p>This will give us a list of the 10 most common occupations, and how many males and females are doing them. Let&#x2019;s make a chart:</p><!--kg-card-begin: html--><div id="occupation-chart">
  <svg style="height:500px;width=500px;"/>
</div>

<script type="text/javascript">
  d3.json('https://vik-affirm-assets.s3-us-west-1.amazonaws.com/exploring-us-healthcare-data/occupations.json', function(data) {
    nv.addGraph(function() {
      var chart = nv.models.multiBarHorizontalChart()
                  .x(function(d) { return d.label })
                  .y(function(d) { return d.value })
                  .showValues(true) //Show bar value next to each bar.
                  .tooltips(true) //Show tooltips on hover.
                  .transitionDuration(350)
                  .margin({top: 30, right: 20, bottom: 50, left: 175})
                  .showControls(true); //Allow user to switch between "Grouped" and "Stacked" mode.

      var new_dat = [
          {
            key: "Males",
            color: "#4f99b4",
            values: []
          },
          {
            key: "Females",
            color: "#d67777",
            values: []
          }
      ];
      for(var i=0;i < data.length;i++){
        var label = data[i].occupation;
        new_dat[0].values.push({
          label: label,
          value: data[i].male_count
        });
        new_dat[1].values.push({
          label: label,
          value: data[i].female_count
        });
      }

      chart.yAxis
          .tickFormat(d3.format(',r'));

      d3.select('#occupation-chart svg')
          .datum(new_dat)
          .call(chart);

      nv.utils.windowResize(chart.update);

      return chart;
    });
  });
</script><!--kg-card-end: html--><p>We see that women outnumber men in jobs like <code>Nurse Practitioner</code> and <code>Physician Assistant</code>, whereas there are more men in jobs like <code>Internal Medicine</code> and <code>Emergency Medicine</code>.</p><h3 id="gender-based-payment-inequality">Gender based payment inequality</h3><p>This is interesting, but doesn&#x2019;t tell us much about payments. Let&#x2019;s look at how much practitioners of each speciality are paid, broken down by gender:</p><!--kg-card-begin: html--><div id="occupation-pay-chart">
  <svg style="height:500px;width=500px;"/>
</div>


<script type="text/javascript">
  d3.json('https://vik-affirm-assets.s3-us-west-1.amazonaws.com/exploring-us-healthcare-data/occupation_pay.json', function(data) {
    nv.addGraph(function() {
      var chart = nv.models.multiBarHorizontalChart()
                  .x(function(d) { return d.label })
                  .y(function(d) { return d.value })
                  .showValues(true) //Show bar value next to each bar.
                  .tooltips(true) //Show tooltips on hover.
                  .transitionDuration(350)
                  .margin({top: 30, right: 20, bottom: 50, left: 175})
                  .showControls(true); //Allow user to switch between "Grouped" and "Stacked" mode.

      var new_dat = [
          {
            key: "Males",
            color: "#4f99b4",
            values: []
          },
          {
            key: "Females",
            color: "#d67777",
            values: []
          }
      ];
      for(var i=0;i < data.length;i++){
        var label = data[i].occupation;
        new_dat[0].values.push({
          label: label,
          value: data[i].male_count
        });
        new_dat[1].values.push({
          label: label,
          value: data[i].female_count
        });
      }

      chart.yAxis
          .tickFormat(d3.format(',r'));

      d3.select('#occupation-pay-chart svg')
          .datum(new_dat)
          .call(chart);

      nv.utils.windowResize(chart.update);

      return chart;
    });
  });
</script>
<!--kg-card-end: html--><p> Men are, on average, reimbursed more from Medicare for every single speciality in the top 10 most common. This is kind of insane, and I don&apos;t know how to explain it. Anyone with insight here would be welcome. &#xA0;</p><p><strong>So where are all these doctors, anyways? </strong></p><p>Let&apos;s move from high-level analysis into location based analysis. One interesting way to do this is to see where the &quot;million dollar doctors&quot; -- the ones who bill the most to Medicare -- are. Let&apos;s make a map. &#xA0; &#xA0;</p><!--kg-card-begin: html--><div id="top-physicians" style="height=500px;"></div>


<script type="text/javascript">

d3.json('https://vik-affirm-assets.s3-us-west-1.amazonaws.com/exploring-us-healthcare-data/top_docs.json', function(data) {
   var tiles = L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
    maxZoom: 18,
    attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors, Points © 2012 LINZ'
   }),
   latlng = L.latLng(40, -100);

  var map = L.map('top-physicians', {center: latlng, zoom: 4, layers: [tiles]});

  var markers = L.markerClusterGroup();

  for (var i = 0; i < data.length; i++) {
   var a = data[i];
   var marker = L.marker(new L.LatLng(a.lat, a.long), { title: a.name });
   marker.bindPopup(a.name + " " + a.payment);
   markers.addLayer(marker);
  }

  map.addLayer(markers);
});

</script><!--kg-card-end: html--><p>The lesson seems to be, if you are a doctor, get to Florida ASAP. &#xA0;</p><p><strong>State life expectancy </strong></p><p>Let&apos;s look at life expectancy by state and see how that correlates with Medicare spending. Two theories would be that spending is higher in states with a lower life expectancy (because it is more needed there). The opposite could also be true (spending is higher in states with higher life expectancy, which is what leads to the higher expectancy). &#xA0;In order to do this, we can get life expectancy data from <a href="http://en.wikipedia.org/wiki/List_of_U.S._states_by_life_expectancy?ref=vikparuchuri.com">here</a>. It is pretty easy to copy/paste the data into a csv file, or use an automated scraper. &#xA0;We can then create a per state charges data frame: &#xA0;</p><!--kg-card-begin: markdown--><p><code>state_data = tapply(docs$payment, docs$nppes_provider_state, mean)per_state_charges = data.frame(state=names(state_data), charge=state_data)</code></p>
<p>And we can read in the life expectancy data and combine them (assuming we read the data into <code>life_e</code>):</p>
<p><code>life_comp = merge(life_e, per_state_charges, by.x=&quot;Code&quot;, by.y=&quot;state&quot;, all.y=FALSE, all.x=TRUE)</code></p>
<p>We can then look at the correlation between life expectancy and average Medicare payments by state.</p>
<p><code>groups = c(&quot;African.American&quot;, &quot;Asian&quot;, &quot;Latino&quot;, &quot;Native.American&quot;, &quot;White&quot;, &quot;Total&quot;)correlations = as.numeric(lapply(groups, function(x){  dat = life_comp[!is.na(life_comp[,x]),]  cor(dat[,x], dat$charge)}))cor_frame=data.frame(group=gsub(&quot;\\.&quot;, &quot; &quot;, groups), cor=correlations)</code></p>
<!--kg-card-end: markdown--><p>This will actually find the correlation for each racial group (the life expectancy data has it, so why not use it?). &#xA0; &#xA0; &#xA0;</p><!--kg-card-begin: html--><div id="group-corr-chart">
  <svg style="height:500px;width=500px;"/>
</div>

<script type="text/javascript">
  d3.json('https://vik-affirm-assets.s3-us-west-1.amazonaws.com/exploring-us-healthcare-data/group_correlations.json', function(data) {
     nv.addGraph(function() {
      var chart = nv.models.discreteBarChart()
          .x(function(d) { return d.label }) //Specify the data accessors.
          .y(function(d) { return d.value })
          .tooltips(false) //Don't show tooltips
          .showValues(true) //...instead, show the bar value right on top of each bar.
          .transitionDuration(350)
          ;

      var new_data = [
        {
          key: "Life expectancy and Medicare charge correlation",
          values: [
          ]
        }
      ]

      for(var i=0;i<data.length;i++){
        new_data[0].values.push({
          label: data[i].group,
          value: data[i].cor
        })
      }

      d3.select('#group-corr-chart svg')
          .datum(new_data)
          .call(chart);

      nv.utils.windowResize(chart.update);

      return chart;
    });
  });
</script><!--kg-card-end: html--><p>This is a really interesting result! The total is negatively correlated with life expectancy very strongly, which indicates that Medicare spending is higher where it is needed (ie states with lower life expectancies get more Medicare spending). &#xA0;</p><p>As for the individual ethnic groups, I am not 100% certain what it means, but I will try to interpret (let me know what you think!). The interesting part is that life expectancy for whites correlates more strongly with spending, which indicates that Medicare is more strongly optimized towards the needs of the white population than the population as a whole. Other groups are less strongly negatively correlated, and some are positively correlated, which indicates that Medicare isn&apos;t as responsive to those groups. Of course, the data is only 100% complete for whites and overall, so missing data may be causing noise. But it is very interesting that Medicare spends much less in areas where the native american life expectancy is lowest, for instance. &#xA0;</p><p><strong>The End / Future analysis</strong></p><p>I really enjoyed this analysis, and want to do more, but I am running out of weekend time in which to do it! Next time, I think I will take a look at fraud, and see if it is possible to make models to detect fraud. I also want to see how combining this dataset with some of the other interesting Medicare datasets will look.</p>]]></content:encoded></item><item><title><![CDATA[Simple speech recognition in Python]]></title><description><![CDATA[<p>Sometime today, I got the idea to try to do automatic speech recognition. &#xA0;Speech recognition, even though it is widely used (and is on our phones), still seems kind of sci-fi-ish to me. &#xA0;The thought of running it on your own computer is still pretty exciting.</p><p>I looked</p>]]></description><link>https://www.vikparuchuri.com/simple-speech-recognition-in-python/</link><guid isPermaLink="false">5dfe86ae5bc84f00388d726d</guid><category><![CDATA[python]]></category><category><![CDATA[speech]]></category><category><![CDATA[scribe]]></category><category><![CDATA[vik]]></category><dc:creator><![CDATA[Vik Paruchuri]]></dc:creator><pubDate>Thu, 10 Apr 2014 15:28:00 GMT</pubDate><content:encoded><![CDATA[<p>Sometime today, I got the idea to try to do automatic speech recognition. &#xA0;Speech recognition, even though it is widely used (and is on our phones), still seems kind of sci-fi-ish to me. &#xA0;The thought of running it on your own computer is still pretty exciting.</p><p>I looked for open source libraries, and was pleasantly surprised to find <a href="http://cmusphinx.sourceforge.net/?ref=vikparuchuri.com">Sphinx</a>, a CMU project. &#xA0;It has python bindings, and even lets you train your own language models (awesome!).</p><p>Unfortunately, it was hard to find a working example that takes in audio from a microphone, and does speech recognition on it. &#xA0;I decided to spend a couple of hours on getting all the configuration and steps down.</p><p>It&#x2019;s pretty cool &#x2013; you start the python script, say some things, and it converts that audio to text. &#xA0;Check it out <a href="https://github.com/VikParuchuri/scribe?ref=vikparuchuri.com">here</a>.</p>]]></content:encoded></item><item><title><![CDATA[An easy way to get started with automated essay scoring]]></title><description><![CDATA[<p>Wow, it&#x2019;s been way too long since I have updated this blog! &#xA0;I am going to start making more frequent updates, and I have some cool things in the pipeline, so bear with me.</p><p>Last year, I wrote <a href="http://vikparuchuri.com/on-the-automated-scoring-of-essays/?ref=vikparuchuri.com">this post</a> on automated essay scoring. &#xA0;This was</p>]]></description><link>https://www.vikparuchuri.com/an-easy-way-to-get-started-with-automatic-essay-scoring/</link><guid isPermaLink="false">5dfe86ae5bc84f00388d726c</guid><category><![CDATA[aes]]></category><category><![CDATA[essay]]></category><category><![CDATA[scoring]]></category><category><![CDATA[python]]></category><category><![CDATA[vik]]></category><dc:creator><![CDATA[Vik Paruchuri]]></dc:creator><pubDate>Tue, 25 Mar 2014 15:28:00 GMT</pubDate><content:encoded><![CDATA[<p>Wow, it&#x2019;s been way too long since I have updated this blog! &#xA0;I am going to start making more frequent updates, and I have some cool things in the pipeline, so bear with me.</p><p>Last year, I wrote <a href="http://vikparuchuri.com/on-the-automated-scoring-of-essays/?ref=vikparuchuri.com">this post</a> on automated essay scoring. &#xA0;This was essentially distilling my experience with <a href="http://en.wikipedia.org/wiki/Automated_essay_scoring?ref=vikparuchuri.com">automated essay scoring</a> and trying to introduce it to people unfamiliar with it. &#xA0;I got a lot of great reaction, and based on this post, and some of my other work in the field, I get a lot of emails about the topic.</p><p>Most people who email me want to know how to get started with automated essay scoring. &#xA0;I always struggle with where to point them, because none of the tools that exist right now (including ones written by me!) are extremely easy to use.</p><p>A couple of weeks ago, I reached a tipping point, and told myself that I wouldn&#x2019;t give another person a non-answer, and started working on an easy-to-use, and open source, essay scoring server. &#xA0;You can find it <a href="https://github.com/VikParuchuri/scan?ref=vikparuchuri.com">here</a>.</p><p>I will go into more detail about how I made it and how the algorithm works later on, but the keys for now are:</p><p>Nontechnical:</p><ul><li>Web interface that makes it easy to create problems and enter essays</li><li>Visual feedback on how the model is scoring</li><li>Easy to install and start using</li></ul><p>Technical:</p><ul><li>Good unit test coverage for the algorithm (&gt;90%)</li><li>Easy to develop on with vagrant</li></ul><p>The primary caveat is that I made this in 1.5 days. &#xA0;It works, and people have tested it, but some parts are unpolished, and there are likely bugs that I don&#x2019;t know about.</p><p>Please feel free to reach out if you want to contribute, or just want to chat about this. &#xA0;I&#x2019;m excited to see how people use it!</p>]]></content:encoded></item><item><title><![CDATA[What makes us happy?  Lets look at data to find out.]]></title><description><![CDATA[<p>I&#x2019;ve had a lot of different jobs over the past 4 years, and I&#x2019;ve had some incredible experiences along the way. Lately, I&#x2019;ve been struggling with what to do next. Or perhaps more accurately, I&#x2019;ve been struggling with how to decide what</p>]]></description><link>https://www.vikparuchuri.com/what-makes-people-happy/</link><guid isPermaLink="false">5dfe86ae5bc84f00388d726b</guid><category><![CDATA[happiness]]></category><category><![CDATA[happsee]]></category><category><![CDATA[somerville]]></category><category><![CDATA[r]]></category><category><![CDATA[leaflet]]></category><category><![CDATA[kaggle]]></category><category><![CDATA[causation]]></category><category><![CDATA[vik]]></category><dc:creator><![CDATA[Vik Paruchuri]]></dc:creator><pubDate>Thu, 14 Nov 2013 01:49:00 GMT</pubDate><content:encoded><![CDATA[<p>I&#x2019;ve had a lot of different jobs over the past 4 years, and I&#x2019;ve had some incredible experiences along the way. Lately, I&#x2019;ve been struggling with what to do next. Or perhaps more accurately, I&#x2019;ve been struggling with how to decide what to do next. Decisions that seem obvious in hindsight are tough to come to grips with beforehand, and it&#x2019;s led me to think about what metric I am trying to maximize. I admit that it&#x2019;s odd to think of life as a way to increase certain metrics, but aren&#x2019;t we doing this already in a different way? A lot of people (myself included) will at some point say that all we care about is money. Isn&#x2019;t that just us saying that money is the metric we want to maximize? Now that I am older and wiser (yeah, right), I find myself increasingly concerned with maximizing my own happiness.</p><p>Happiness is this strange concept that nobody quite understands, nobody quite wants to admit to not having, and isn&#x2019;t always consistent (do we care about moment-to-moment happiness, or long-term happiness?). I think <a href="http://en.wikipedia.org/wiki/Happiness?ref=vikparuchuri.com">Wikipedia</a> says it best with &#x201C;happiness is a fuzzy concept and can mean different things to different people.&#x201D; Great. Thanks, Wikipedia. The more I read about happiness research, the more I realized that in order to truly understand what makes me happy, I would have to start capturing information about it. This has led me to develop an Android application called <a href="http://www.happsee.com/?ref=vikparuchuri.com">Happsee</a> that can be used to track and visualize happiness. The results have been fantastic so far, and I will be sharing them in a later post. This post, though, is about looking at happiness on a higher level.</p><p>In the course of creating Happsee, I met/have been meeting with a lot of people in the Boston area who are doing interesting things in the field. One of these people is <a href="http://www.linkedin.com/in/danielhadley?ref=vikparuchuri.com">Daniel Hadley</a>, the head of <a href="http://www.ci.somerville.ma.us/departments/somerstat/staff?ref=vikparuchuri.com">SomerStat</a>, a very cool department of the city of <a href="http://www.somervillema.gov/?ref=vikparuchuri.com">Somerville</a> that tries to quantify various aspects of life in the city and make them better. One of these aspects is happiness, and SomerStat has compiled data on happiness in Somerville going back to 2006. I tried not to let my eyes get too wide when Daniel told me about this data (normal people like normal things &#x2013; I like data). He was gracious enough to share the anonymized data with me, and I will be looking at it in this post in order to see if it can help us better understand happiness.</p><h2 id="more-about-the-data-and-our-first-chart">More about the data, and our first chart</h2><p>The data from Somerville consists of a survey that asks people how happy they are, how satisfied with life they are, and some other questions about their happiness on a 1-10 scale. It also contains other information, like location, race, and gender. Here is a small sample:</p><figure class="kg-card kg-image-card"><img src="https://vik-affirm-assets.s3-us-west-1.amazonaws.com/what-makes-people-happy/somerville_survey.png" class="kg-image" alt="somerville sample" loading="lazy"></figure><p>As you can see, the data is pretty messy in places. My first step was to cleanup and explore the data. After doing so, I got this plot:</p><figure class="kg-card kg-image-card"><img src="https://vik-affirm-assets.s3-us-west-1.amazonaws.com/what-makes-people-happy/happiness_clusters.png" class="kg-image" alt="somerville happiness 2d" loading="lazy"></figure><p>This plot comes from taking survey questions about how satisfied people are in general, and how satisfied they are about their neighborhoods, and turning them into two dimensional data. The technique I used (read more about <a href="http://en.wikipedia.org/wiki/Singular_value_decomposition?ref=vikparuchuri.com">SVD</a> if you are interested, it&#x2019;s very cool) thought that people&#x2019;s happiness and their satisfaction with their neighborhood were both very important, and clustered people according to them.</p><p>What does this tell us? Well, off the bat, most people are happy and/or really like where they live. I don&#x2019;t know how this data was collected, so there could be sample bias, but it seems like Somervillians (is this even a word?) are very well off. It&#x2019;s also interesting to note that even though how much you like your area correlates strongly with happiness, it&#x2019;s still possible for a lot of people to be happy if they don&#x2019;t like the area or vice versa. I would have thought this wouldn&#x2019;t happen for a lot of people, but I guess the Wikipedia quote had it right.</p><h2 id="mapping-happiness">Mapping happiness</h2><p>People seem to have very strong feelings about their neighborhoods. Let&#x2019;s try mapping out happiness by area to see if there is any correlation:</p><!--kg-card-begin: html--><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/leaflet/0.6.4/leaflet.css">
    <link rel="stylesheet" href="https://vik-affirm-assets.s3-us-west-1.amazonaws.com/what-makes-people-happy/somerville_happiness.css">
    <link href="https://fonts.googleapis.com/css?family=Cherry+Swash" rel="stylesheet" type="text/css">

    <div id="somerville-map" class="somerville-map"></div>

    <script src="//cdnjs.cloudflare.com/ajax/libs/leaflet/0.6.4/leaflet.js"></script>
    <script src="https://s3-us-west-1.amazonaws.com/vik-affirm-assets/what-makes-people-happy/rainbowvis.js"></script>
    <script src="https://s3-us-west-1.amazonaws.com/vik-affirm-assets/what-makes-people-happy/somerville_map.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script><!--kg-card-end: html--><p>The above shows the coordinates of each survey response to the question how happy are you right now in 2013. All coordinates are anonymized by adding random noise to both latitude and longitude (so some points are in weird places, like the middle of the highway).</p><p>It looks like there are some clusters of low happiness towards the edges of the city. These may be correlated with certain features of the neighborhood. I would love to hear insight on this if anyone has any.</p><p>So it looks like while how much you like your neighborhood is pretty strongly correlated with happiness, there is no particular neighborhood that makes people extremely unhappy (or vice versa). Let&#x2019;s look at what does correlate with happiness.</p><h2 id="what-correlates-with-happiness">What correlates with happiness?</h2><p>We can use a statistical significance test to discover the things that are closely related to happiness. We will be using an <a href="http://en.wikipedia.org/wiki/Analysis_of_variance?ref=vikparuchuri.com">ANOVA</a> test. This test will give us a <a href="http://en.wikipedia.org/wiki/P-value?ref=vikparuchuri.com">p-value</a>. We will take any p-value below .05 to mean that the variable is related to happiness.</p><p>The survey questions whose answers correlated closely with happiness in order of most to least:</p><!--kg-card-begin: html--><div>
    <p class="c2">How satisified are you with your life in general?</p>
    <p class="c2">Taking everything into account, how satisfied are you with Somerville as a place to live?</p>
    <p class="c2">How satisfied are you with your neighborhood as a place to live? </p>
    <p class="c2">In general, how similar are you to other people you know? </p>
    <p class="c2">How would you rate the Public Services in Somerville? (there were a lot of closely correlated items here, like public schools, garbage collection, and street maintenance) </p>
    <p class="c2">When making decisions, are you more likely to seek advice or decide for yourself?</p>
    <p class="c2">Overall, would you say that the City of Somerville is moving in the right direction or the wrong direction?</p>
    <p class="c2">What is your marital status?</p>
    <br>
</div><!--kg-card-end: html--><p>The above items are correlated with happiness, which means that generally, as happiness changes, so do they (can be either positive or negative). However, this doesn&#x2019;t tell us anything actionable. For example, happier people could be more likely to think that the city of Somerville is headed in the right direction. What we really want to know is if thinking Somerville is headed in the right direction <em>causes</em> people to become happier.</p><h2 id="what-causes-happiness">What causes happiness?</h2><p>Correlation versus causation is an extremely difficult problem to solve, especially when you can&#x2019;t gather additional data. <a href="http://www.kaggle.com/?ref=vikparuchuri.com">Kaggle</a>, a website that posts machine learning challenges, recently had a <a href="http://www.kaggle.com/c/cause-effect-pairs?ref=vikparuchuri.com">competition</a> on the subject. Luckily for us, I participated in the competition, and have a program that can tell if something is a cause or an effect with reasonable accuracy (but not perfect). Let&#x2019;s run the program on the factors that are correlated with happiness to discover if any of them were likely to <em>cause</em> happiness.</p><p>The analysis indicates that how you answer the following question is caused by how happy you are:</p><p>Taking everything into account, how satisfied are you with Somerville as a place to live? &#xA0; &#xA0;<br></p><p>This is a very interesting result, as it shows that how satisfied you feel about life can be caused by how happy you feel in a particular moment. I will let the psychologists sort this result out, but for me personally, it indicates that trying to maximize moment-to-moment happiness could be a viable strategy.</p><p>The analysis indicates that how you feel about these questions causes how happy you are. So, if you answer more positively to these, you will generally be happier:</p><p>Taking everything into account, how satisfied are you with Somerville as a place to live?</p><p>How satisfied are you with your neighborhood as a place to live?</p><p>In general, how similar are you to other people you know?</p><p>How do you feel about the Public Schools?</p><p>How do you feel about the Public Works Department (e.g. requests for yard waste stickers or white good pick-up)?</p><p>How do you feel about the Recreation Programs in Somerville? &#xA0; &#xA0;<br></p><p>There are some surprises here (public works?), but they generally seem consistent with prior results. How people feel about their neighborhoods strongly affects how happy they are. Improving things like public school quality should boost resident happiness. Personally, this indicates that moving to another place would be a great way to boost happiness (luckily, I love Cambridge).</p><h2 id="a-closer-look-at-some-interesting-correlations">A closer look at some interesting correlations</h2><p>Let&#x2019;s take a closer look at some of the interesting variables that could potentially cause happiness:</p><figure class="kg-card kg-image-card"><img src="https://vik-affirm-assets.s3-us-west-1.amazonaws.com/what-makes-people-happy/neighborhood_satisfaction.png" class="kg-image" alt="neighborhood satisfaction" loading="lazy"></figure><p>It seems that happiness goes up as you like your neighborhood more, but there is a strange set of high happiness levels associated with low neighborhood satisfaction. I wonder if anyone in Somerville has insight into this.</p><figure class="kg-card kg-image-card"><img src="https://vik-affirm-assets.s3-us-west-1.amazonaws.com/what-makes-people-happy/similarity.png" class="kg-image" alt="similarity" loading="lazy"></figure><p>This is very interesting to me, as surrounding yourself with diverse viewpoints is often helpful.</p><figure class="kg-card kg-image-card"><img src="https://vik-affirm-assets.s3-us-west-1.amazonaws.com/what-makes-people-happy/public_schools.png" class="kg-image" alt="public schools" loading="lazy"></figure><p>A lot of public services look like this one (although to lesser degrees).</p><h2 id="what-does-it-all-mean">What does it all mean?</h2><p>As with everything about happiness, its hard to tell. Below are some provisional conclusions that are by no means ironclad.</p><h3 id="on-a-personal-level">On a personal level</h3><ul><li>Where you live seems to be very important.</li><li>Who you associate with seems to be important.</li><li>How you interact with your surroundings (school, recreation, etc) seems to matter.</li></ul><h3 id="on-a-city-level">On a city level</h3><ul><li>The quality of city services can matter a lot.</li><li>More &#x201C;customer-facing&#x201D; services like schools and recreation seem to be the most important.</li><li>Citizen happiness can be affected at a city level.</li></ul><h2 id="what-s-next">What&#x2019;s next?</h2><p>I will be looking into this data more and seeing if anything else remains to be discovered. There are a huge amount of interesting things that can be done, and thanks again to Daniel and SomerStat for letting me look at this.</p><p>As I continue making <a href="http://www.happsee.com/?ref=vikparuchuri.com">Happsee</a>, I am going to try to figure out these kinds of insights and more in real-time, which I am hugely excited about. Here is a map tracking two weeks of my own happiness in and around Boston:</p><figure class="kg-card kg-image-card"><img src="https://vik-affirm-assets.s3-us-west-1.amazonaws.com/what-makes-people-happy/hs2-1.png" class="kg-image" alt loading="lazy"></figure><p>Imagine being able to anonymously map happiness in real-time throughout your city, and couple the mapping with realtime insight. This could be incredibly powerful. The more steps I take down the path to understanding myself and my own happiness, the more I am struck by how much it can tell me and help me.</p><p>If you are interesting in talking more about this post, what I am working on, or data in general, feel free to contact me. If anyone wants to do similar analysis in their own city, I am happy to help. I normally put the code for my blog posts on Github, but I will need to hold off for now to clean the code up and check on whether or not the data can be released.</p>]]></content:encoded></item><item><title><![CDATA[Open sourcing movide, a student-centric learning platform]]></title><description><![CDATA[<p>I haven&#x2019;t blogged in a while, mostly because I have been trying to figure out what I should do next. One thing that I have been working on lately that I am very passionate about is <a href="http://www.movide.com/?ref=vikparuchuri.com">Movide</a>. Movide is a student-centric learning platform. You might yawn at this</p>]]></description><link>https://www.vikparuchuri.com/open-sourcing-movide/</link><guid isPermaLink="false">5dfe86ae5bc84f00388d726a</guid><category><![CDATA[lms]]></category><category><![CDATA[movide]]></category><category><![CDATA[learning]]></category><category><![CDATA[education]]></category><category><![CDATA[edtech]]></category><category><![CDATA[open]]></category><category><![CDATA[source]]></category><category><![CDATA[vik]]></category><dc:creator><![CDATA[Vik Paruchuri]]></dc:creator><pubDate>Sat, 19 Oct 2013 00:24:00 GMT</pubDate><content:encoded><![CDATA[<p>I haven&#x2019;t blogged in a while, mostly because I have been trying to figure out what I should do next. One thing that I have been working on lately that I am very passionate about is <a href="http://www.movide.com/?ref=vikparuchuri.com">Movide</a>. Movide is a student-centric learning platform. You might yawn at this point and wonder why Movide matters. It&#x2019;s a natural reaction, given the crowded learning tools marketplace. Movide, matters, I think, because it is an <a href="http://www.github.com/equirio/movide?ref=vikparuchuri.com">open source</a> attempt to change the LMS and learning tool paradigm.</p><p>Traditional LMS tools are great for what they do &#x2013; enable course content to be translated from in-classroom to online. They often serve as content-delivery mechanisms rather than skills measurement mechanisms. This is extremely useful, and I have learned a lot from content hosted on LMS sites. &#x201C;Social&#x201D; LMS tools are also fantastic for what they do &#x2013; reimage the LMS experience for a more connected, Facebook-driven era. These often have content delivered in social-media like &#x201C;streams.&#x201D; I know both of these characterizations are oversimplifications, but I have limited space.</p><p>Neither tool can cover all learners and learning styles, and as I reflected more about how I learn, talked with people about how they learn, and read about research in the field, I realized that perhaps there was space for a tool that approached learning in a different way.</p><h2 id="where-did-movide-come-from">Where did Movide come from?</h2><p>I have thought a lot about learning tools in the past year, in the course of which I have been privileged enough to work at <a href="http://www.edx.org/?ref=vikparuchuri.com">edX</a>. This led me to think about how I learn. Over the past two years, I have learned programming, <a href="http://en.wikipedia.org/wiki/Machine_learning?ref=vikparuchuri.com">machine learning</a>, <a href="http://en.wikipedia.org/wiki/Data_science?ref=vikparuchuri.com">data science</a>, web development, and a whole host of other associated skills.</p><p>Increasingly, the problem isn&#x2019;t finding the right content &#x2013; content is everywhere. I&#x2019;ve learned from <a href="http://www.khanacademy.com/?ref=vikparuchuri.com">Khan academy</a>, I&#x2019;ve learned from <a href="http://cs.stanford.edu/people/ang/?ref=vikparuchuri.com">Andrew Ng&#x2019;s</a> machine learning course, I&#x2019;ve learned from <a href="http://www.stackoverflow.com/?ref=vikparuchuri.com">StackOverflow</a>, and I&#x2019;ve learned from <a href="http://www-stat.stanford.edu/~tibs/ElemStatLearn/printings/ESLII_print10.pdf?ref=vikparuchuri.com">this great book</a>, among dozens of other sources.</p><p>I operate best when I find a problem that I want to solve, and then learn how to solve it. The hardest part for me often is finding that defined problem, and finding an engaged community of peers to share knowledge with. For data science and machine learning specifically, I found both on <a href="http://www.kaggle.com/?ref=vikparuchuri.com">Kaggle</a>, but this doesn&#x2019;t work for every field. What if I wanted to learn history, or how to add, or even something as abstract as how to think critically?</p><p>This reflection on how I learn led me to think back on my own in-classroom experiences, and what worked best there and what didn&#x2019;t. Most of the time, I was a terrible student. I almost never turned in homework, and I generally had a bad attitude. I only occasionally connected with the material, and often did not feel engaged. As I look back, I realize that I didn&#x2019;t approach it the right way. The experiences that I can unequivocally remember as good centered around people and problems &#x2013; the amazing teacher in high school who brought history alive, the group report I did in elementary school on the Chesapeake Bay, the time my elementary school teacher asked me to research Japanese-American internment during WWII for a school challenge, and many others. I also remember being extremely curious and eager to share my knowledge &#x2013; I would often stay up at night and read novels by flashlight.</p><p>I often wondered if I was the only person whose desire to learn was not sated through school. As I have talked to people over the years, I realize increasingly that I am not alone. Looking at research like <a href="http://www.hole-in-the-wall.com/?ref=vikparuchuri.com">Sugata Mitra&#x2019;s</a> hole in the wall experiment, and <a href="http://www.wired.com/business/2013/10/free-thinkers/?ref=vikparuchuri.com">recent news on it</a> has also been very interesting to me. I&#x2019;m not as radical as some of the debate surrounding the research, but I think the ultimate goal is to harness student curiosity and let it drive the learning process instead of the other way around.</p><h2 id="what-is-movide">What is Movide?</h2><p>Movide is a tool oriented around the idea of a class. A class can be a teacher and students, a class can be a group of adult learners, a class can be a group of students sharing notes, or a class can be anything in between. Movide lets anyone create classes.</p><p>Here is how the class dashboard looks. It lets you create classes and view your existing classes:</p><figure class="kg-card kg-image-card"><img src="https://vik-affirm-assets.s3-us-west-1.amazonaws.com/open-sourcing-movide/dashboard.png" class="kg-image" alt="movide classes" loading="lazy"></figure><p>Inside a class, Movide lets anyone, student or teacher, add content and problems. Content can be videos, links, personal blog entries, and so on. Problems right now are restricted to assignments, where students respond to a question with text as well as images, video, and files if they choose, and multiple choice. But the selection will expand over time. Once this content exists, teachers can organize it, and students and teachers can discuss it. Teachers can define concrete learning objectives and skills, and track student progress towards those skills.</p><p>Here is how the learning resources (which contain content and problems) look inside a class:</p><figure class="kg-card kg-image-card"><img src="https://vik-affirm-assets.s3-us-west-1.amazonaws.com/open-sourcing-movide/resources.png" class="kg-image" alt="movide resources" loading="lazy"></figure><p>And here is how the learning objectives and skills look inside a class:</p><figure class="kg-card kg-image-card"><img src="https://vik-affirm-assets.s3-us-west-1.amazonaws.com/open-sourcing-movide/skills.png" class="kg-image" alt="movide skills" loading="lazy"></figure><p>We can quickly see how some of the ideas I expressed above have made it into Movide. Movide enables students to find interesting and useful content and then share and discuss it with each other, all while still working towards learning objectives. This combines the power of self-paced learning with the necessities of the curriculum, while encouraging students to interact with each other. It also enables teachers to direct the conversation and add course content.</p><p>Here are some things that you can do with Movide:</p><ul><li>Give students a way to create and share interactive notes.</li><li>Maintain in-class student blogs.</li><li>Teach a skills-based course, with online course material and the ability to track student progress.</li><li>Create a continuous in-class discussion.</li><li>Ask students to create assignments for each other.</li><li>Offer students homework help outside of class.</li></ul><p>Movide is also designed to be easy to use. I remember talking to someone a year ago about the importance of design, and I, in my arrogance, thought that software was all about coding. As I have worked more in the field, I have learned how wrong I was.</p><p>Obviously, Movide isn&#x2019;t perfect, and it is under continuous development. But I think that it is a step in the right direction.</p><h2 id="how-can-i-help-or-use-movide">How can I help or use Movide?</h2><p>So far, what I&#x2019;ve really discussed is my own take on learning. I recognize the immense value in the expertise of learning professionals. I would love any and all feedback on Movide, and on the ideas I have expressed. Please feel free to contact me at vik dot paruchuri at gmail, or by any of the means listed on this page.</p><p>If you want to use movide, you can <a href="http://www.movide.com/?ref=vikparuchuri.com">go here</a>. If you want to run Movide on your own server, you can checkout the <a href="http://www.github.com/equirio/movide?ref=vikparuchuri.com">github repo</a>, which has a full deployment script that can get you started very quickly.</p><p>If you want to contribute Movide, check it out on Github. Feel free to message me about what might be most useful to work on.</p><h2 id="technical-bits">Technical bits</h2><p>Movide is really extensible, and is built in <a href="http://www.python.org/?ref=vikparuchuri.com">Python</a> using the <a href="https://www.djangoproject.com/?ref=vikparuchuri.com">Django</a> web framework. It uses <a href="http://django-rest-framework.org/?ref=vikparuchuri.com">django-rest-framework</a> to provide a full API, which could be very useful down the road. The API allows for authenticated retrieval and creation of anything used by the frontend.</p><p>The frontend is written in <a href="http://en.wikipedia.org/wiki/JavaScript?ref=vikparuchuri.com">javascript</a>, using <a href="http://backbonejs.org/?ref=vikparuchuri.com">Backbone</a>, and most of the design is taken care of by <a href="http://getbootstrap.com/?ref=vikparuchuri.com">Twitter Bootstrap</a>. What these technologies mean is that it is very easy to customize Movide to your own needs, whether that need is a retheming or building an iPad app. A mobile application could easily use the API endpoints and construct a user interface around them. Retheming is as easy as overriding the default bootstrap stylings.</p><p>Movide is currently deployed to <a href="http://aws.amazon.com/ec2/?ref=vikparuchuri.com">Amazon EC2</a>, and uses <a href="http://aws.amazon.com/cloudformation/?ref=vikparuchuri.com">Cloudformation</a> to spin up the resource stack, and <a href="http://www.ansibleworks.com/?ref=vikparuchuri.com">Ansible</a> to deploy to it. The Github repo for Movide has more information about how to do this yourself.</p><h2 id="what-is-the-future-for-movide">What is the future for Movide?</h2><p>I&#x2019;ve been talking to people and pondering a lot of future directions for Movide. Phase one is to create a useful system that enables teachers and students to share and discuss content.</p><p>Phase two could involve automatically using machine learning to determine when a student is struggling, or has mastered a skill, and alert the teacher. I discussed some of these ideas in my <a href="https://www.vikparuchuri.com/on-the-automated-scoring-of-essays">automated essay scoring blog entry</a>. It could also involve gamifying learning by giving students levels of progress to work towards. It could also involve creating better collaboration tools within Movide for students and teachers to create documents, or make a class whiteboard online.</p><p>Ultimately, the future direction will be dependent on you and your feedback. I would love to hear any and all thoughts.</p>]]></content:encoded></item><item><title><![CDATA[The power, and danger, of visualizations]]></title><description><![CDATA[<p>I recently posted about <a href="https://www.vikparuchuri.com/how-divided-is-the-senate/">visualizing the voting patterns</a> of senators. In the post, I scraped voting data for each senator on every vote in the 113th Congress from the Senate website, and then assigned a code of 0 for a no vote on a particular issue, 1 for a yes</p>]]></description><link>https://www.vikparuchuri.com/the-danger-and-power-of-visualizations/</link><guid isPermaLink="false">5dfe86ae5bc84f00388d7269</guid><category><![CDATA[r]]></category><category><![CDATA[senate]]></category><category><![CDATA[visualization]]></category><category><![CDATA[mistakes]]></category><category><![CDATA[svd]]></category><category><![CDATA[vik]]></category><dc:creator><![CDATA[Vik Paruchuri]]></dc:creator><pubDate>Wed, 07 Aug 2013 19:01:00 GMT</pubDate><content:encoded><![CDATA[<p>I recently posted about <a href="https://www.vikparuchuri.com/how-divided-is-the-senate/">visualizing the voting patterns</a> of senators. In the post, I scraped voting data for each senator on every vote in the 113th Congress from the Senate website, and then assigned a code of 0 for a no vote on a particular issue, 1 for a yes vote, 2 for abstention, and 3 if the senator was not in office at the time of the vote (ie, a senator was switched mid-term).</p><p>I was then able to turn this data into two dimensions and plot it to show how the voting patterns of the senators differed. This led to the plot below:</p><figure class="kg-card kg-image-card"><img src="https://vik-affirm-assets.s3-us-west-1.amazonaws.com/the-danger-and-power-of-visualizations/senate.png" class="kg-image" alt="senate polarization" loading="lazy"></figure><p>From the above plot, it appears that the Massachusetts and New Jersey senators are very extreme in their voting patterns. Both <a href="http://jcborras.net/?ref=vikparuchuri.com">Juan Carlos Borr&#xE1;s</a> and <a href="http://twitter.com/phnk?ref=vikparuchuri.com">Fr.</a> pointed out in the comments that this was due to the coding of the votes. Massachusetts and New Jersey had senators who were changed mid-term, causing their votes to be coded as a 3. Since nobody else had votes coded as a 3, this caused them to appear like they had very different voting patterns, when in fact, they just were not there.</p><p>I had known of the 3-coding initially, but opted to keep the data &#x201C;as-is.&#x201D; The more I think about it, the more I realize that this could be used to spin a false narrative. I easily could say &#x201C;democrats tend to be very extreme in their voting, just look at John Kerry!&#x201D;, or &#x201C;Massachusetts is the most radical state in the country!&#x201D; based on the above chart. Of course, neither of these statements are strictly true, but the chart above, which is based on accurate data, could be used to tell such a story.</p><p>If we reconstruct the chart without any senators who were switched mid-term, we can tell a very different story.</p><h2 id="our-new-story">Our new story</h2><figure class="kg-card kg-image-card"><img src="https://vik-affirm-assets.s3-us-west-1.amazonaws.com/the-danger-and-power-of-visualizations/updated_senate_plot.png" class="kg-image" alt="updated senate polarization" loading="lazy"></figure><p>The above plot is an updated version, and tells our new story. As we can see, the new story shares a lot of similarities with the old story &#x2013; we still see that Collins and Murkowski are close to the center ideologically, and we still see that there is a clear ideological dividing line between the parties.</p><p>A key difference is that both dimensions are meaningful now. The x dimension is telling us how far the parties are from each other, and the y dimension is telling us how much variation there is within each party. We still see solid voting clusters around party leadership, but we also see senators such as Paul and Heitkamp who vote significantly differently from their own parties (but not in a way that moves them in the ideological direction of the other party).</p><p>Looking at the &#x201C;most extreme&#x201D; senators again gives us all Republicans, which makes sense, as they are the party out of power, and are thus the farthest from the &#x201C;average&#x201D; view.</p><h2 id="what-lessons-can-we-learn">What lessons can we learn?</h2><p>Any data visualization can be manipulated, sometimes unconsciously, to weave a certain tale. Often, this tale can be backed up with data. This brings us to the major trap of visualizations. They can simplify data to the point where it is comprehensible. Coupling the power of a machine to rapidly scan large amounts of data and the power of a human to recognize patterns can lead to powerful insights. But unless it is clearly spelled out how the visualization came to be, and we think clearly about it, we risk something being oversimplified, often to the point where the meaning that is conveyed is different from the actual meaning of the data. By simplifying, we remove understanding.</p><p>This problem can be addressed in two broad ways, I think. One is to publish the source data and methodology for creating the visualization. In my case, this coupled with some smart readers led to a good catch. The second is to directly allow the viewer to manipulate the visualization in a data-driven way. This would allow a viewer to draw their own conclusions, without the preformatted data being given to them. <a href="http://d3js.org/?ref=vikparuchuri.com">D3.js</a> and <a href="http://www.rstudio.com/shiny/?ref=vikparuchuri.com">shiny</a> allow this, and I would like to play around with them to see if it is feasible to make visualizations in this way.</p><p>If you have any other ideas for balancing simplification and understanding, please let me know.</p>]]></content:encoded></item><item><title><![CDATA[On the automated scoring of essays and the lessons learned along the way]]></title><description><![CDATA[<p>We&#x2019;ve all written essays, primarily while we were in school. The sometimes enjoyable process of researching the topic and composing the paper can take hours and hours of careful work. Given this, people react badly to the notion that their essays may be scored not by a human</p>]]></description><link>https://www.vikparuchuri.com/on-the-automated-scoring-of-essays/</link><guid isPermaLink="false">5dfe86ae5bc84f00388d7268</guid><category><![CDATA[aes]]></category><category><![CDATA[asap]]></category><category><![CDATA[kaggle]]></category><category><![CDATA[edx]]></category><category><![CDATA[essay]]></category><category><![CDATA[scoring]]></category><category><![CDATA[discern]]></category><category><![CDATA[ease]]></category><category><![CDATA[python]]></category><category><![CDATA[vik]]></category><dc:creator><![CDATA[Vik Paruchuri]]></dc:creator><pubDate>Wed, 31 Jul 2013 19:30:00 GMT</pubDate><content:encoded><![CDATA[<p>We&#x2019;ve all written essays, primarily while we were in school. The sometimes enjoyable process of researching the topic and composing the paper can take hours and hours of careful work. Given this, people react badly to the notion that their essays may be scored not by a human teacher, but <a href="http://gettingsmart.com/2012/04/automated-essay-scoring-systems-demonstrate-effectiveness/?ref=vikparuchuri.com">by machine</a>.</p><p>A piece of software coldly judging the quality of our carefully constructed phrases and metaphors based on unknown criteria is more than most writers can bear. But is this what automated essay scoring (AES) is? If not, what is it? In this article, I aim to explore what AES is, the state of field, some of the lessons I have learned along the way, and where I think it is going.</p><h2 id="who-am-i">Who am I?</h2><p>I&#x2019;m going to ramble a bit here, so please indulge me. I have been involved in the AES field for 2 years now, but the building blocks were laid well before that.</p><p>I didn&#x2019;t know it at the time, but my interest in AES began with my own struggles with higher education. I never knew what I wanted out of my life when I was in school, and wouldn&#x2019;t have seen college as the way to get there even if I had. Afterwards, this gave me a keen interest in trying to find ways to personalize learning.</p><p>I later joined the <a href="http://careers.state.gov/officer?ref=vikparuchuri.com">US foreign service</a>, a career that required me to do a lot of writing (see: Wikileaks cables). I ended up leaving the foreign service, a decision that led to me learning programming and <a href="http://en.wikipedia.org/wiki/Machine_learning?ref=vikparuchuri.com">machine learning</a>, the art of how to teach computers to predict things, through <a href="https://www.vikparuchuri.com/resources-for-learning-statistics-and/">online materials</a>. But I kept my love for writing alive.</p><p>Imagine my surprise when I found a three month long competition sponsored by the <a href="http://www.hewlett.org/?ref=vikparuchuri.com">Hewlett Foundation</a>, and hosted by <a href="http://www.kaggle.com/?ref=vikparuchuri.com">Kaggle</a>, that aimed to develop algorithms to <a href="http://www.kaggle.com/c/ASAP-AES?ref=vikparuchuri.com">automatically score essays</a>. I won&#x2019;t try to dance around the issue; I initially competed because I noticed that some extremely smart people were in it, and I wanted to see how I stacked up. But as time went on, I became more and more invested in the subject, and began to recall my own experiences with higher education and writing.</p><p>I was fortunate enough to be able to work with <a href="http://www.kaggle.com/users/12386/justin-fister?ref=vikparuchuri.com">Justin Fister</a>, and we ended up coming in 3rd place out of 156 teams in the competition. Most of the major assessment companies (think Pearson, McGraw-Hill, etc) also participated, but more on this later. In a <a href="http://www.kaggle.com/c/asap-sas?ref=vikparuchuri.com">second competition for short answers</a>, we teamed up with Measurement, Inc. (MI), and came in first place on the leaderboard, although we were ineligible for prizes due to our company affiliation. You can find the excellent papers from the winners, as well as their code, <a href="http://www.kaggle.com/c/asap-sas/details/winners?ref=vikparuchuri.com">here</a>.</p><p>As strange as it sounds, even though I was sitting at my computer, coding for hours on end, participating in those competitions was a lot of fun. I was able to spend every day learning, striving, and implementing (I may have had a less rosy recollection had I not done so well). But the luster quickly faded post-contest. We had made some interesting advances, and now possessed a lot of knowledge, but so what? The knowledge was not being applied to anything, and there is a huge gap between theoretical and real-world results. Justin found a job at MI, and I went to work for <a href="https://www.edx.org/?ref=vikparuchuri.com">edX</a>, a massively open online class (MOOC) provider based in the Boston area, where I started to apply what I learned.</p><p>You may have heard of the <a href="http://www.nytimes.com/2013/04/05/science/new-test-for-computers-grading-essays-at-college-level.html?pagewanted=all&amp;ref=vikparuchuri.com">edX automated essay scoring algorithm</a>, and the backlash such as <a href="http://mfeldstein.com/si-ways-the-edx-announcement-gets-automated-essay-grading-wrong/?ref=vikparuchuri.com">this</a> and <a href="http://www.hackeducation.com/2012/04/15/robot-essay-graders/?ref=vikparuchuri.com">this</a> to it and AES. I created this algorithm, and as much as the criticism can sting or get really strange (the guy who wrote the first backlash article I linked to decided to call it <a href="https://news.ycombinator.com/item?id=5801692&amp;ref=vikparuchuri.com">first year graduate student level</a>, which I guess he thinks is an insult), I think that there are valid points on both sides of the issue, and I will try to go through them in my discussion.</p><h2 id="what-is-aes">What is AES?</h2><p>To me, AES is the art of giving students automatic, iterative, and correct, scores and feedback on their essays and constructed responses. &#xA0;You may notice that I inserted several concepts that go beyond the narrow scope contained in the words &#x201C;automated essay scoring&#x201D;. I will go through each one in order:</p><ul><li>Feedback - in many applications of AES, such as in a <a href="http://www.mba.com/the-gmat/gmat-scores-and-score-reports/understanding-your-score-report.aspx?ref=vikparuchuri.com">&#x201C;second reader&#x201D;</a> role on the GMAT(more on what this is later), feedback isn&#x2019;t as important. But in all cases where a student will be learning based on how their response is scored, feedback is absolutely critical.</li><li>Iterative - One of the main advantages of AES is that students can submit their response as many times as they want, getting very quick feedback and scoring each time.</li><li>Constructed responses - Automated scoring isn&#x2019;t just about essays. As the second Hewlett Foundation competition showed, computers can grade constructed responses as well.</li><li>Correct - Automated essay scoring is somewhat useful if its scores are only marginally inaccurate, but its utility goes away if it can&#x2019;t score properly.</li></ul><p>Now, maybe you don&#x2019;t agree with my definition, but at least we have a baseline idea of what it is for when we proceed through this article. If you don&#x2019;t agree with this, I would love to hear what your definition is, and how you think this definition can be made better.</p><h2 id="a-brief-history-of-aes">A brief history of AES</h2><p>Remarkably, the idea of AES first came about in 1966, and was advanced by <a href="http://en.wikipedia.org/wiki/Ellis_Batten_Page?ref=vikparuchuri.com">Ellis Page</a>. Amazingly, it only took him two years to come up with working software. I can&#x2019;t even imagine how much ingenuity it must have taken to do what he did with the hardware/software limitations of the time. His software, called Project Essay Grade (PEG), was later purchased by Measurement, Inc., which continues to develop it.</p><p>Through the 1990s and 2000s, several other companies, such as <a href="http://www.ets.org/?ref=vikparuchuri.com">Educational Testing Service</a>, <a href="http://www.pearson.com/?ref=vikparuchuri.com">Pearson</a>, and <a href="http://www.ctb.com/ctb.com/control/main?ref=vikparuchuri.com">CTB/McGraw-Hill</a>, started developing their own tools. Some open tools, such at <a href="http://echo.edres.org:8080/betsy/?ref=vikparuchuri.com">BETSY</a>, also appeared. ETS in particular has published a lot of <a href="http://www.ets.org/erater/publications/?ref=vikparuchuri.com">interesting papers</a>, which you should check out if you are interested.</p><p>One major use case of these tools was as an automated &#x201C;second reader&#x201D; for high stakes tests. A human first scored the test, after which a machine scored it. If the two scored differed by a certain amount, then a third human re-scored the paper to resolve the dispute. Another major use case was as an in-classroom learning tool. In fact, these are still the primary use cases for AES.</p><h2 id="how-does-aes-work">How does AES work?</h2><p>Here is a rough diagram of automated essay scoring:</p><figure class="kg-card kg-image-card"><img src="https://vik-affirm-assets.s3-us-west-1.amazonaws.com/on-the-automated-scoring-of-essays/aes-flow.png" class="kg-image" alt="aes diagram" loading="lazy"></figure><p>So, students first write some essays. Teachers then grade these essays using whatever criteria they want and a machine learning model is created.</p><p>A machine learning model differs from a machine learning algorithm. A machine learning algorithm is a blank slate that can be trained to do a certain task. To make a bit of a stretch analogy, think of it as a computer brain &#x2013; it is capable of learning something, but it doesn&#x2019;t know how to do it yet. We then train this algorithm, this computer brain, to score essays. After it has been trained, it gives us a machine learning model, which can be used to score more essays.</p><p>In order for a machine learning model to be created, features first need to be extracted from the text, as a computer cannot directly understand English. We need to use the numbers as proxies for meaning.</p><p>Features are just numbers that describe certain things. For example, in my current apartment, one feature is that it has 1.5 bathrooms, and another feature is that it has 2 bedrooms. If I was going to build a machine learning model to predict apartment rents, I might pass in these features. I would then map the features to a certain amount of rent. So, for example, if one apartment has 1.5 bathrooms and 2 bedrooms and costs 1,000 dollars a month in rent, whereas another apartment has 1 bathroom and 1 bedroom and costs 500 dollars a month in rent, a machine could learn that a certain number of bedrooms and a certain number of bathrooms equal a certain amount of rent. So, if we ask it to predict the rent for an apartment with 1 bathroom and 2 bedrooms, it might say 900 dollars.</p><p>Let&#x2019;s look at this is the context of essays, using some examples from a presentation I did last month:</p><p>Say that I wanted to give a survey today and ask you <em>why do you want to learn about machine learning?</em></p><p>The responses might look like this:</p><pre><code>I like solving interesting problems.
What is machine learning?
I&apos;m not sure.
Machine learning predicts everything!
</code></pre><p>Let&#x2019;s say that the survey also asks people to rate their interest on a scale of 0 to 2.</p><p>We would now have the responses and associated interest scores:</p><p>numberresponsescore1I like solving interesting problems.22What is machine learning?03I&apos;m not sure.04Machine learning predicts everything!2$(&apos;.table&apos;).dataTable({ &quot;bPaginate&quot;: false, &quot;bLengthChange&quot;: false, &quot;bSort&quot;: false, &quot;bStateSave&quot;: true, &quot;sScrollY&quot;: 200, &quot;sScrollX&quot;: 500, &quot;bFilter&quot;: true, &quot;bInfo&quot;: false, &quot;aLengthMenu&quot;: [[50, 100, -1], [50, 100, &quot;All&quot;]], &quot;iDisplayLength&quot;: 4, }); <br></p><p>So, let&#x2019;s say that we get a half-filled-out survey that forgot to include the interest score. All we got was the sentence <code>I really like solving problems. Machine learning is very useful.</code> Now, if we look at this in the context of the other responses, we can infer that the interest of the person is likely a 2/2. But how would a computer do the same thing? Through features.</p><p>Some of the features we might extract:</p><ul><li>Presence/absence of the phrase <code>solving problems</code>. (0 if absent, 1 if present)</li><li>Number of sentences.</li><li>Presence/absence of <code>machine learning</code>.</li><li>Average word length.</li><li>Presence/absence of <code>machine</code>.</li></ul><p>This is a very simple example, but it gives you a good idea of what features are. Features allow us to represent text, which a machine does not understand, as numbers, which it does understand.</p><p>We can then tell a machine learning <a href="http://en.wikipedia.org/wiki/Supervised_learning?ref=vikparuchuri.com">algorithm</a>, such as a random forest, or a linear regression, that a certain sequence of features means that the teacher gave the student a 2, another sequence of features means that the teacher gave the student a 0, and so on. This trains the algorithm, and gives us a model.</p><p>Once the model is created, then it can predict the scores for new essays. We would take a new essay, turn it into a sequence of features, and then ask our model to score it for us.</p><p>As you can see, what the model is trying to do is mimic the human scorer. The model is figuring out how an expert human scorer grades an essay, and then trying to apply that same criteria to other essays. So, it isn&#x2019;t actually a machine judging essays on arbitrary criteria; its a machine trying to figure out the criteria a human uses to score essays, and then apply those criteria to grade other essays.</p><p>More on this is beyond the scope here, but I recently did a <a href="http://vikparuchuri.com/my-talk-at-boston-python/?ref=vikparuchuri.com">talk</a> about AES, and also have a <a href="http://vikparuchuri.com/natural-language-processing-tutorial/?ref=vikparuchuri.com">tutorial</a> on my blog, both of which I highly encourage you to check out if you are interested.</p><h2 id="applying-aes">Applying AES</h2><p>Now that I have given you the theory, let&#x2019;s talk about application. Here is a diagram of how we grade essays and constructed responses at edX:</p><figure class="kg-card kg-image-card"><img src="https://vik-affirm-assets.s3-us-west-1.amazonaws.com/on-the-automated-scoring-of-essays/edx-flow.png" class="kg-image" alt="edx flow" loading="lazy"></figure><p>So, when a student answers a question, it goes to any or all of self, peer, and AES to be scored. Written feedback (from peer assessment), and rubric feedback (from all three assessments) are displayed to the student.</p><p>It is completely up to the instructor how each problem is scored, and how the rubric looks. Here is an example rubric (I&#x2019;m not good at making rubrics, so it&#x2019;s not excellent):</p><pre><code>Topicality
0 points - Student is off topic
1 point - Student stays on topic

Photosynthesis
0 points - Incorrectly defines photosynthesis
1 points - Partially correct definition
2 points - Fully correct definition
</code></pre><p>The AES would tell you how you did on each of the rubric dimensions (which are customizable by the instructor).</p><p>Here is specifically how the AES works:</p><figure class="kg-card kg-image-card"><img src="https://vik-affirm-assets.s3-us-west-1.amazonaws.com/on-the-automated-scoring-of-essays/edx-aes-flow.png" class="kg-image" alt="edx aes flow" loading="lazy"></figure><p>The main difference between this and the generic workflow I showed you before is that edX allows teachers to regrade essays that AES has scored poorly. When a machine learning model scores an essay, it doesn&#x2019;t just give you a score; it also gives you a confidence value from 0% - 100% associated with that score. A low confidence indicates that the machine learning model does not know how to score a given essay well. We show student papers that AES has already graded to the teacher, in order of lowest confidence to highest. When a teacher re-scores a paper, it gives the student the correct score, and makes the machine learning model better (it won&#x2019;t make the same mistake twice). This is called <i><a href="http://en.wikipedia.org/wiki/Active_learning_(machine_learning)?ref=vikparuchuri.com">active learning</a></i>.</p><p>The AES will give the student feedback on how many points they scored for each category of the rubric. I show you this example less to discuss the strengths and weaknesses of the edX system (it has both), but more to lead into a discussion of how, when, and why AES should be deployed.</p><h2 id="lessons-of-application">Lessons of application</h2><p>I personally have learned a lot of lessons in both developing and applying AES algorithms. Below are some, in no particular order. I talk about the edX system a lot, because I have a lot of recent experience with it.</p><h3 id="don-t-forget-the-goal">Don&#x2019;t forget the goal</h3><p>The goal here isn&#x2019;t to impress people with fancy technology or tell teachers how they should teach. The goal is to maximize student learning and limited teacher resources (time) in a way that is flexible, and under the control of the subject expert (teacher).</p><h3 id="scale">Scale</h3><p>In a MOOC setting, AES makes sense. It is hard/impossible for a teacher to score thousands of students each week, and writing is a critical component of many courses. But scale can also play a big part in the classroom. Can a teacher grade 10 drafts per student per week? Maybe it makes sense to allow students to score their &#x201C;intermediate revisions&#x201D; with AES, improve their writing, and give their key drafts and finished products to a teacher for more detailed feedback.</p><h3 id="aes-is-mostly-best-used-in-combination-with-other-ideas-technologies-concepts">AES is (mostly) best used in combination with other ideas/technologies/concepts</h3><p>In the same vein as the point above, AES is useful in some domains, and can given students accurate scores and rubric feedback. However, AES cannot give detailed feedback like an instructor or peer can. You should evaluate your options and see how you can best use AES. Maybe it works for certain questions. Maybe you can grade tests with AES. Maybe it is good for grading first drafts. Maybe you should combine it with small group discussions or peer scoring. If the tools are built properly, it will be possible to evaluate all these options, and figure out which one, if any, has the most value for students.</p><h3 id="put-the-power-in-the-hands-of-teachers">Put the power in the hands of teachers</h3><p>AES is useless when the power is in the hands of researchers and programmers (although it does make us feel important). The real people who need to shape and implement these technologies are teachers and students, and they need the power to define how the AES looks and works. Maybe a teacher doesn&#x2019;t need to define what features the AES uses, but being able to turn off the AES for certain students might be useful.</p><h3 id="give-people-the-information-that-they-need">Give people the information that they need</h3><p>AES is a semi-shadow world to a lot of people, and that may be partially by design. The less we tell people about how things are done, the more valuable and important we become. I am always leery of researchers who take the &#x201C;non-cooperative expert&#x201D; stance. All of the software I developed/helped develop at edX is <a href="http://code.edx.org/?ref=vikparuchuri.com">open source</a>, and I have been <a href="https://github.com/vikparuchuri/?ref=vikparuchuri.com">open sourcing</a> all of my recent personal work. But just open source is not enough. We need to discuss what the code is doing, build up documentation around it, and most critically, allow people to contribute to it, to make it truly useful. The Hewlett Foundation, and particularly <a href="http://www.hewlett.org/about-the-william-and-flora-hewlett-foundation/foundation-staff/victor-vuchic?ref=vikparuchuri.com">Vic Vuchic</a>, have done some great work here, and I hope it is continued.</p><h3 id="have-the-algorithm-tell-people-how-it-is-working">Have the algorithm tell people how it is working</h3><p>Algorithms can estimate their own error rates (how many papers they grade correctly vs incorrectly). At edX, these error rates are displayed to teachers, so that teachers can make the machine learning models better if they want to. Giving teachers and students as much information as possible within an AES system is key. If we don&#x2019;t know how something is working, how can we tell if it is doing what we want?</p><h3 id="it-s-not-all-about-the-algorithm">It&#x2019;s not all about the algorithm</h3><p>Most of the time I spent creating the edX open response assessment tool was spent on things that don&#x2019;t have to do with the algorithm. Algorithms are fun and exciting, but learning tools are only useful if they help students, well, learn. The most important thing in this is usability. Can a student quickly digest and use their feedback? Can a teacher quickly create a new problem and deliver it to students? It is actually pretty easy to implement an algorithm. It is hard to put the things in place around it to allow students to succeed. I would even venture to say that once you get a certain level of accuracy in your algorithm, improving usability should become the primary goal.</p><h3 id="make-everything-usable">Make everything usable</h3><p>Is the product designed for teachers or for &#x201C;expert&#x201D; researchers? Does a user have to manually read a ton of essays into a command line or GUI program (think Microsoft office)? How do students get papers into the system? At edX, everything is a web-based tool, and students can write papers and receive feedback entirely through a web interface. Teachers can create problems that use AES in a few clicks, and can grade student papers through a web interface. This isn&#x2019;t the end all be all of ways to approach this, but more user friendly is better.</p><h3 id="grading-isn-t-all-about-essays">Grading isn&#x2019;t all about essays</h3><p>Can we grade uploaded videos? How about pictures or songs? This can be done with peer and teacher grading, but AES needs to be extended to work with alternative media as technology advances.</p><h3 id="keep-coming-up-with-new-ideas">Keep coming up with new ideas</h3><p>I alluded earlier to several large assessment companies participating in the Kaggle essay scoring competition. In fact, these companies were the American Institutes for Research, Carnegie Mellon University (Lightside), CTB/McGraw-Hill, Educational Testing Service (ETS), MetaMetrics, Measurement, Inc., Pearson, Pacific Metrics, and Vantage Learning. The Carnegie Mellon (CMU) tool is and was open source, but crucially, it does not appear to be open information or open contribution (edit: Elijah Mayfield points out in the comments that the Carnegie Mellon tool is on <a href="https://bitbucket.org/lightsidelabs/lightside?ref=vikparuchuri.com">bitbucket</a>, and is open contribution). The vendors and the teams didn&#x2019;t compete on exactly the same leaderboard, and you can read more about the results <a href="http://www.scribd.com/doc/91191010/Mark-d-Shermis-2012-contrasting-State-Of-The-Art-Automated-Scoring-of-Essays-Analysis?ref=vikparuchuri.com">here</a>, but the algorithms of the vendors and the competition participants were evaluated on the same data sets (edit: Shayne Miel, referenced below, has told me that the vendors were evaluated on a slightly different data set. However, there were advantages on both sides, as vendors got to talk to the Hewlett Foundation about the data several times).</p><p>Competitors and vendors were ranked by quadratic weighted kappa (QWK), which measures how closely the predicted scores from the models matched up with human scores (higher kappas are better). We can summarize the performance with this excellent charts from <a href="http://www.kaggle.com/users/1602/christopher-hefele?ref=vikparuchuri.com">Christopher Hefele</a>:</p><figure class="kg-card kg-image-card"><img src="https://vik-affirm-assets.s3-us-west-1.amazonaws.com/on-the-automated-scoring-of-essays/aes-vendors.png" class="kg-image" alt="vendors vs performers" loading="lazy"></figure><p>We can see that the top six competition participants did better in terms of accuracy than all of the vendors. I have discussed before what I think of accuracy as the sole metric for AES success, so take this with a bit of salt. The main reason I show this is to illustrate that open competition, with a fair target, can lead to very unexpected results and breakthroughs.</p><p>Even the open source solution from CMU that was included in the competition scored a QWK of .7538, good for only 19th place on the final leaderboard, which indicates that it is less about open source than about open information, access, and competition (observant readers may notice that the guy who made the CMU tool is the same guy who called my code &#x201C;first year graduate student level&#x201D; and disparaged the edX tool. I note this only to acknowledge potential bias &#x2013; I do not think I am biased in thinking that open information is key, but I may be wrong, and let me know if you think I am).</p><p>I think that the best results come about when fresh ideas can be combined with existing knowledge and expertise. There are some extremely bright people in the AES industry that I have been fortunate enough to meet and/or work with, such as <a href="http://www.linkedin.com/in/cbrew?ref=vikparuchuri.com">Chris Brew</a>, <a href="http://www.linkedin.com/pub/shayne-miel/66/b2a/859?ref=vikparuchuri.com">Shayne Miel</a>, <a href="http://www.linkedin.com/pub/david-vaughn/35/319/226?ref=vikparuchuri.com">David Vaughn</a>, and many more. When Justin and I teamed up with Shayne and David, we ended up doing very well in the second Hewlett Foundation competition.</p><p>This second chart, also from Christopher, is also interesting:</p><figure class="kg-card kg-image-card"><img src="https://vik-affirm-assets.s3-us-west-1.amazonaws.com/on-the-automated-scoring-of-essays/aes-scores.png" class="kg-image" alt="performance rising" loading="lazy"></figure><p>Each line is how one of the top competitors performed on the public leaderboard (essentially us testing our algorithms before the final evaluation). Looking at the &#x201C;VikP &amp; jman&#x201D; line, which is the line for my team, brings back some memories of frantic coding and thinking up crazy solutions to increase accuracy.</p><p>We can see how performance changes over time, as algorithms got more and more accurate. But only up to a certain point. The data that we worked with in the competition to train our algorithms was limited &#x2013; we could not create more. What you are seeing is everyone converging on a maximum theoretical accuracy. After this point, there is not much more that can be achieved (which is another reason why I think things other than accuracy should be more emphasized).</p><p>I went through all of this to get to a relatively straightforward point &#x2013; we need to make tools that are open and usable, and we need to make information readily available. I have a strong feeling that doing this will lead to breakthroughs and new directions that nobody has thought of yet.</p><h3 id="everything-else-i-didn-t-think-of">Everything else I didn&#x2019;t think of</h3><p>There are many more lessons to be learned. Let me know if you think of any.</p><h2 id="the-bright-future">The bright future</h2><p>The Hewlett Foundation has been doing some excellent work in the AES space, and I know that they are planning in-classroom trials of various AES products. Unfortunately, I believe that the group of products has already been picked, and is mostly commercial products or &#x201C;established&#x201D; products.</p><p>Some scenarios that I hope emerge out of this trial and others are below. Some of these are already being done to varying degrees:</p><ul><li>AES is used as a way to give students iterative feedback before submitting a final draft to a teacher for a full evaluation. Does this help learning?</li><li>AES systems experiment with giving teachers information, and allowing them to regrade and customize grading.</li><li>Automated systems pre-score essays, and automatically identify students who might need teacher intervention.</li><li>A teacher scores an essay, then is given the score the same essay received via AES, and can update their score if they believe that the AES brings up useful points.</li><li>Small group discussions and peer grading are tried in combination with AES.</li><li>Automated scoring of alternative types of media, like videos, begins to emerge.</li></ul><p>Hopefully I have given you a good idea of what AES is, and what it can do, and how it might look in the future. Please let me know if you have any questions or want to share something. You can find me in a ridiculous amount of places: the comments section here, twitter (@VikParuchuri), linkedin, and email (vik dot paruchuri at gmail). Pick one.</p>]]></content:encoded></item></channel></rss>