Subscribe to join the best students on the planet!!-Have Instagram? DM me your math problems! VSCO Photo by benceszemerey. Search at VSCO has transformed from a way to locate users and order history to a full-fledged image discovery system. In early 2013, we needed a way to find users who had registered to purchase VSCO Film on our website. Image and Grid Search, in February 2014. First iteration of VSCO search service by (skulls.
Do you plan your Instagram feed in advance?
With a well planned Instagram feed, you can visually convey your brand values in seconds — which is key for converting visitors into followers.
Discover how to plan your Instagram feed and leave a lasting impression on your audience in 4 easy steps:
How To Visually Plan Your Instagram Feed
Your Instagram feed is one of the first things a visitor sees when they land on your profile. If you want to stop them in their tracks, you need to think about more than just your individual Instagram posts — you need to consider your feed as a whole.
By taking the time to plan your Instagram feed in advance, you can create cohesive, on-brand content that aligns with your business and turns clicks into customers.
Here’s how you can visually plan your Instagram feed and create your own, cohesive aesthetic:
- Plan and Preview Your Instagram Feed in Advance
Step #1: Choose Your Instagram Aesthetic
The first thing you’ll want to do is decide on the Instagram aesthetic of your profile, and a great way to do this is just by looking at other accounts forinspiration.
What do some of your favorite feeds look like? Are they bright and airy? Dark and moody? Do they follow some sort of pattern in their composition?
Taking the time to think about these things while you’re browsing your favorite profiles will help you decide what “aesthetic” will best represent you and your brand.
If you’re a business, you can also find inspiration for your Instagram aesthetic from your branding.
TakeRitual, for example. If you’ve encountered the brand before, you’ll quickly recognize the bold blues and bright yellows that cover their feed:
Your brand colors, fonts, and textures can all help shape a unique and captivating aesthetic on Instagram.
TIP: Once you’ve got an idea of what your Instagram aesthetic will be, bring it to life by creating a brandmood board.
Creating a mood board is a really great way to help get your creativity flowing and guide you in deciding what you want your feed to look like.
This is great for helping to set the direction of your feed, and can act as a pulse check further down the line as you post new content.
Plan and preview your Instagram feed in advance with Later for free! Sign up and start creating your perfect Instagram aesthetic today:
Step #2: Find Content for Your Instagram Feed Aesthetic
Once you’ve decided on your Instagram aesthetic, you can start creating and curating content that aligns with it.
Supplementing your feed withuser-generated content (UGC) and stock photos can be a great way to build on your aesthetic, while also strengthening the sense ofcommunity around your business.
Alternatively, you can always use stock images or videos that align with your new aesthetic.
How to Find Great User-generated Content and Stock Photos
If you’re on the lookout for new content for your feed,Later’s UGC tools are a great place to start.
You can review all of the posts you’ve been tagged or mentioned in, search for posts that include a certain hashtag.
And with Later’s Stock Photos feature, you can search, find, and schedule photos from Unsplash straight from Later!
Simply click the “Collect Media” tab and select “Stock Photos” to browse thousands of Unsplash photos to add to your social media schedule.
Improve your content workflow withLater’s user-generated content tools — source, schedule and repost UGC to your feed in minutes!
Step #3: Use Filters to Keep Your Instagram Feed Consistent
One of the easiest ways to create a cohesive Instagram aesthetic is during the photo and video editing process. Choosing the same filter, set of filters, or editing “rules”, will help you keep your photos looking consistent.
And while there are tons of different apps out there for touching up and editing your photos, two of our favorites for easy, on-the-go edits areVSCO app andAdobe Lightroom.
Editing Instagram Photos with VSCO:
If you’re looking to level-up your Instagram photos, often with just one or two taps, you might want to check out theVSCO app.
It has lots of free filters to choose from and even curated preset packs of complementary filters making it a cinch to edit your photos and create a beautiful Instagram feed.
If you find you’re consistently applying the same adjustments to your Instagram images, you can even save editing “recipes” to quickly recreate your favorite look over and over again. It’s a personal and unique filter that you can create just for your content.
Editing Instagram Photos with Lightroom:
If you’re looking to give your photos a more professional look,Lightroom is by far one of the most powerful photo editing tools out there, especially because you can use ready-madeLightroom presets!
Lightroom presets are one-click photo editing tools that can dramatically speed up your workflow and give your Instagram photos a professional look.
While masteringAdobe Lightroom on desktop takes time and practice, using Lightroom presets on the mobile app is a quick and easy way to take your Instagram photos to the next level.
Since many presets are offered in “packs” or collections, you can choose from a selection of filters for each of your photos while still maintaining a cohesive look on your Instagram feed.
Another great way to give your photos a more cohesive look is by making adjustments to the temperature, brightness, or contrast to keep things consistent.
Step #4: Plan and Preview Your Instagram Feed in Advance
Next up, it’s time to think about how your posts will look as a whole on your feed.
No matter what editing style you choose, you’re going to want to think about how your Instagram posts look alongside one another.
Basically, you want to make sure it’s easy for new eyes to move throughout your feed and get a strong impression of what your brand is all about.
You’ll also want to check your feed is visually interesting and not too repetitive.
A good way to do this is by experimenting with different compositions — placing more busy photos next to clean or minimal photos to break things up a bit.
If you’re a business selling products on your Instagram feed, you can do this by mixing up your product shots with some user-generated content posts, lifestyle photos, or any other different types of content you plan to publish.
TIP: Don’t forget to think about where yourInstagram shopping posts will live on your feed too. Create a balance between lifestyle and product shots to break things up and add variety.
How to Plan Your Instagram Feed
The best way to plan your Instagram feed and make sure everything’s flowing together is by using Later’sVisual Instagram Planner.
Later’s Visual Instagram Planner shows you exactly what your Instagram feed will look like with your future posts (both images and videos) in it — it’s a game-changer when it comes to nailing your aesthetic.
It lets you easily rearrange or swap out your posts, so you can find the perfect balance for your Instagram feed.
Plus, you can now use Later’s Visual Planner straight from your mobile!
Scheduling out your posts ahead of time doesn’t just help you maintain a consistent aesthetic, but it also helps you to post regularly, which is also really important when you’re trying to get more followers.
Now that you’ve learned exactly how to create and curate an Instagram aesthetic for your brand, you’re ready to design, execute, and show off your very own beautifully-crafted Instagram feed!
Ready to create your own Instagram aesthetic? Design, curate, and plan your feed withLater!
Like This Post? Pin It!
VSCO Photo by benceszemerey
Search at VSCO has transformed from a way to locate users and order history to a full-fledged image discovery system. In early 2013, we needed a way to find users who had registered to purchase VSCO Film on our website. The quickest way to solve this then was to perform queries across our MySQL user and order tables—and while not a scalable approach, it initially got the job done.
As we continued to grow and develop new products and services, it was no longer feasible to perform queries across growing relational databases with any sort of scale. In late 2013 we began exploring the use of Elasticsearch to:
- Improve our internal admin user search
- Allow for public search of profiles and images
To tackle this we launched a single Elasticsearch 0.90 instance and ingested data with post-write calls from our monolithic PHP application. We walked our databases and hit the ground running. This allowed us to launch our first public Elasticsearch product, Map, Image and Grid Search, in February 2014.
First iteration of VSCO search service by (skulls by @skewleft)
This was an avenue to surface the most influential content on our platform in a way that would inspire our users to both continue to discover new content and continue to create on VSCO. All of the content we featured in search was hand-selected by our in-house curation team, and at the end of our initial cluster’s life, the instance was only serving somewhere in the neighborhood of 500K images.
By late 2015 we looked back on our initial foray into Elasticsearch, and while it had treated us well (all on a single instance), we came up with a list of pain points and things we wanted to improve:
- Keeping distributed data in-sync and de-normalized can be difficult without a solid ingestion pipeline.
- Not providing strict index schema or having a migration plan was problematic with our rapidly increasing feature-set.
- Not defining service-boundaries or enforcing contracts leads to tight coupling.
Looking at our initial problems, and considering our growing product needs, we knew we needed to build a cluster that could handle a lot more data and provide strict ingestion and access patterns.In order to take Search to the next level, we needed to ensure that our search service could meet the following criteria:
- Continue to support internal Admin search.
- Ensure all user generated content is ingested into the search cluster.
- Allow us to run on easily scalable, cost-efficient infrastructure.
- Allow us to monitor search from all aspects, including: ingestion, indexing, searching and general cluster health.
- Abstract reads/writes to an independent application layer to enforce service-boundaries.
- Allow for service interruptions to indexing that would prevent lost updates.
- Allow for maintenance windows that do not jeopardize items making it into search or partial availability of search results.
- Enable simple incremental upgrades.Initially we looked into converting our standalone instance into a larger cluster with sharding and replication, but it turned out to be an impossible task due to the following:
- We didn’t have a way to take the cluster offline without downtime.
- Elasticsearch 0.90 was severely out of date at the time.
In 2015 there were only a few options for a self-hosted, scalable search experience. Due to our previous, mostly positive, experience with Elasticsearch and all of the new features added from 0.90–2.x we decided that it was a good fit for our needs moving forward.
The Next Phase
We decided the best way forward was to design and build a brand new Elasticsearch cluster alongside our legacy 0.90 instance. This allowed us to remain entirely online during the migration and provided us a way to start fresh without any of the baggage of the past.Our current solution architecture is a combination of Amazon Elasticache, SQS, Docker, Elasticsearch, Go, gRPC and Protocol Buffers.
VSCO search service today
All of the following is in service of our goal to get all user content indexed, and here are the details on how we did that.
We built a custom Elasticsearch Docker image that we run on AWS hardware using EBS-backed storage. We allocate and manage infrastructure using Terraform and provision the base instance dependencies using Chef.We have independent scaling around all of our Elasticsearch nodes and Go services:
- 3 Master Nodes
- 3 Client Nodes
- 30 Data Nodes (and growing)
- Search Service
- Ingestion Service
- Indexing Service
Service Boundary Abstraction (Go Services)
In our initial Elasticsearch deployment, it wasn’t feasible to define service boundaries. During the initial phases of deconstructing our PHP monolith, services that needed access to search could not shoulder the overhead of performing requests to our PHP monolith. To get around this latency issue they would access the cluster directly.To regain control over our search cluster, we needed our service layer to be scalable and performant. We wrote three independent Go services that would control the abstraction necessary for others to communicate with our Elasticsearch data.
Ingestion Service (Go)
Leveraging the work we have done for gRPC @VSCO, we were able to easily build, deploy and implement a robust ingestion pipeline that relied on gRPC and protocol buffers to ensure coherent communication between our monolith and the new search services we built to replace parts of it.Rather than define a new schema for our search data, as we had done in the past, we defined protocol buffers to model our user data at the service level and we ingest the same protocol buffers that the services use to define their models.
We ingest our data through updates sent over gRPC to a Go Ingestion Service from our monolithic PHP application and Core API replacement microservices. The service places the item(s) as protocol buffers on an SQS Queue for processing individually or in bulk.
We use retries in the case of ingestion service interruptions and we backfill to address missing data due to upstream provider issues.
Indexing Service (Go)
One of the most important problems we set out to solve was dropped inserts and updates from our applications to Elasticsearch. By fronting our indexing service with an Amazon SQS queue, we now have the ability to disable indexing at any time and not lose incoming documents / updates.
Based upon the incoming item data-type, we query Elasticsearch for a matching document. If found, updates are merged in (if they pass validation) and then persisted back to Elasticsearch. If the change requires a fanout of de-normalized data, items are added back to the SQS queue to be processed in the background.We throttle/stop indexing through our DCDR feature-flag framework.
Search Service (Go)
We built a Search Service that provides our only access point for performing reads on the cluster. This allows us to disable endpoints, throttle endpoints, provide public or private access to specific endpoints, and stat and monitor everything.
Our mobile and web clients communicate directly with our Search Service, bypassing legacy routing through our monolith. Our Admin communicates with the Search Service over gRPC, and provides access to the now larger store of user data, helping our Support team find users on the platform.
Migration Framework (Go)
In a world where settings and schemas are created and applied via HTTP requests, we decided it was important to define a structured way to manage cluster state.
Based upon concepts from Ruby’s Rake and Doctrine’s Migration Framework, we built a system to handle schema changes and migrations programmatically. All of the changes we have historically made to the cluster are defined in migration files and their status is maintained in a state-store.
Vsco Grid Search
Out of the box Elasticsearch does not have authorization or authentication for HTTP requests. In order to work towards our service-boundary ideals, we put our new Elasticsearch cluster in a separate AWS Security Group with only the Search and Indexing Services being provided explicit access.
Maintenance / Upgrades
We designed our cluster with the ability to allow for rolling upgrades without any downtime by leveraging sharded indexes and replication across multiple AWS availability zones.
This is possible partly through the use of index aliases to read/write all data to and from the cluster.
For example: start with a foo_v1 index and create foo_read and foo_write aliases that point to the foo_v1 index. Your application should use foo_read as its read path and foo_write as the write.
When the foo_v1 index grows too large or you need to make a material change to the mappings add a foo_v2 index and then update the read / write aliases as follows:
This performs the following function:
- All new writes will fill the foo_v2 index
- All reads will look across both indices
By operating in this manner, we can modify the pointer for the underlying index(es) opaquely to any application logic which makes it possible to modify mappings or scale without requiring application changes or deploys.
Create Vsco Account
Achievements / Future
Vsco Log In
Four years ago we could only dream of the Elasticsearch cluster we operate today. Now as we move towards even larger audiences, we can ensure that their content is all discoverable on the platform. In the end, what did we achieve?We are now running an Elasticsearch cluster that:
- Handles 25MM read and 5MM index requests per day.
- Maintains an over-1,000X increase of stored documents and counting.
- Can easily scale any part of the infrastructure on-demand.
In addition to our ability to scale and maintain a large cluster, the ownership of Search and Discovery has moved to the Machine Learning team where we have been able to build many cool features leveraging search including:
- Using our Ava technology to augment image search
- Trending hashtags
- Related images
- Using search to easily prototype new recommendation services
I look forward to VSCO’s future with Elasticsearch and specifically the replacement of our Ingestion Service with a Kafka pipeline. This will allow us to:
Vsco Grid Layout
- Remove blocking RPC updates
- Easily re-index from a given point in time
- Maintain a truly up-to-date caching layer
- Move to true immutable infrastructure for search which will allow us to maintain full availability during any maintenance windows.
Thanks for reading! If you find this kind of work interesting, come join us!